При создании строки используются следующие обозначения:
NSString *foo = @"Bar";
Нужно ли выпустить foo
? Или в этом случае foo
автоматически выпускается?
При создании строки используются следующие обозначения:
NSString *foo = @"Bar";
Нужно ли выпустить foo
? Или в этом случае foo
автоматически выпускается?
Выделенные компилятором строки (формата @ "STRING") являются постоянными, поэтому сообщения -retain, -release и -autorelease игнорируются. В этом случае вам не нужно отпускать или автоматически выпускать foo (но это не повредит).
Как упоминалось в документах
Вы становитесь владельцем объекта, если вы создаете его с помощью метода, имя которого начинается с «alloc» или «new» или содержит «копию» (например, alloc, newObject или mutableCopy), или если вы отправляете ему сообщение о сохранении. Вы несете ответственность за отказ от владения объектами, которыми вы владеете, с помощью выпуска или автоматического выпуска. В любой другой раз, когда вы получите объект, вы не должны его отпускать.
Поскольку вы не используете alloc, copy и т. Д., Вам не нужно беспокоиться об освобождении объекта.
Я согласен с @Ben \ Gottlieb в "Строки, выделенные компилятором (формата @" STRING ") являются константами", но поскольку вы не инициализировали их, передавая сообщение alloc
или retain
, вы не должны передавать им сообщение release
или autorelease
в противном случае ваше приложение выйдет из строя со следующим журналом
"освобождаемый указатель не был выделен"
NSString *str = [NSString string];
эквивалентно:
NSString *str = [[[NSString alloc] init] autorelease];
поэтому release
или autorelease
также нельзя передавать здесь.