Ответ 1
Строки, выделенные компилятором (формата @ "STRING" ), являются постоянными, а сообщения -retain, -release и -autorelease игнорируются. В этом случае вам не нужно выпускать или автозапуска 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
также не должны передаваться здесь.