Вопрос

У меня есть небольшой базовый тест (Objective-C), с которым я играю, и у меня есть несколько вопросов ...

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    int planetLoop;
    NSString *tempString;
    NSMutableArray *planetArray = [[NSMutableArray alloc] init];

    NSLog(@"STRING ARRAY ... Start");
    for(planetLoop=0; planetLoop<10; planetLoop++) {
        tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
        NSLog(@"Planet_%03d", planetLoop+1);
        [planetArray addObject:tempString];
    }

    [planetArray release];
    [pool drain];
    return 0;
}

Во-первых, обычно я освобождаю объект после добавления его в массив, но правильно ли я считаю, что то, что у меня есть в данный момент, правильно, потому что " tempString " является строковым литералом, и поэтому его не нужно выделять или освобождать?

Во-вторых, когда я запускаю это (до выполнения), я получаю следующее сообщение об ошибке " невозможно прочитать неизвестную команду загрузки 0x80000022 " если это проблема с моим кодом? от поиска в Google похоже, что это может быть ошибка в xCode 3.1.2, у кого-нибудь есть какие-нибудь идеи?

Наконец, если я что-то не так делаю, идея состоит в том, чтобы заполнить массив 10 строками " Planet_001 " до "Planet_010"

РЕДАКТИРОВАТЬ: Ах, я вижу, это из-за " = [NSString " бит то есть.

// Autoreleased object
tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
// String literal
tempString = @"Planet_"; 

большое спасибо, очень ценю -gary -

Это было полезно?

Решение

tempString на самом деле не является строковым литералом. @ " Planet_% 03d " является строковым литералом. tempString - объект с автоматическим выпуском, то есть он будет освобожден при сливе NSAutoreleasePool. По сути, память уже управляется, и вам не нужно ничего делать.

Правило: Если вы new , alloc , скопируйте или оставьте объект, затем вам нужно освободить его. В противном случае память уже управляется, возможно, с помощью автоматического выпуска.

Кроме того, вы забыли освободить пул . Кроме того, это выглядит хорошо.

Другие советы

Одна из возможных причин, по которой " невозможно прочитать неизвестную команду загрузки 0x80000022 " Похоже, ошибка в том, что я обновился до Snow Leopard без одновременного обновления инструментов разработчика. Похоже, что ошибка может быть вызвана попыткой использовать версию 10.5 для XCode для компиляции в среде 10.6. Я посмотрю на это завтра.

Xcode 3.2 теперь доступен в выпуске Snow Leopard (Mac OS X 10.6). После установки Snow Leopard обновитесь до Xcode 3.2, установив его отдельно от образа диска Xcode Tools. Вы можете установить его поверх предыдущих версий Xcode или переместить их в сторону перед установкой.

PS: когда я получил " не могу прочитать неизвестную команду загрузки 0x80000022 " ошибка при запуске OSX 10.6.1 с xCode 3.1.2

ура -Гэри -

Это " команда загрузки " ошибка связана с тем, что формат исполняемого файла был изменен с iPhone OS 3.0 на iPhone OS 3.1.

http://networkpx.blogspot.com/2009/09 /about-lcdyldinfoonly-command.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top