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