Подтвердить что ты не робот

Является ли буквальный NSString автореализованным или его нужно освободить?

При создании строки с использованием следующих обозначений:

NSString *foo = @"Bar";

Нужно ли выпускать foo? Или foo автореализован в этом случае?

4b9b3361

Ответ 1

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

Ответ 2

Как упоминалось в документах

http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Tasks/MemoryManagementRules.html

Вы берете на себя ответственность за объект, если вы создайте его, используя метод, чье имя начинается с "alloc" или "new" или содержит "копию" (например, alloc, newObject или mutableCopy), или если вы отправьте сообщение сохранения. Вы ответственный за отказ владение собственными объектами релиз или автореферат. В любое другое время вы получаете объект, вы не должны отпустите его.

Поскольку вы не используете alloc, copy и т.д., вам не нужно беспокоиться о выпуске объекта.

Ответ 3

Я согласен с @Ben\Gottlieb в разделе "Строки, выделенные компилятором (формат @" STRING "), являются константами", но поскольку вы не инициализировали их посредством передачи сообщения alloc или retain, вы не должны проходить release или autorelease, иначе ваше приложение выйдет из строя со следующим журналом

"указатель, который был освобожден, не был выделено"

ПРИМЕЧАНИЕ

NSString *str = [NSString string];

эквивалентно:

NSString *str = [[[NSString alloc] init] autorelease];

поэтому release или autorelease также не должны передаваться здесь.