Дает ли @ "некоторый текст" автоматически освобожденный или сохраняет 1 объект обратно? - PullRequest
11 голосов
/ 20 мая 2011

С учетом этого кода:

// Initialize string
NSString *name = @"Franzi";

@ "" макрос создает строку NSString с заданным текстом (здесь имя Franzi) и СЧЕТОМ RETAIN OF 1?

Так что @ ""NSString с должны быть освобождены или нет?Я несу ответственность за этот объект?Второй пример кода затем смущает меня, хотя я использую его таким образом:

NSSting *message;
message = [NSString stringWithFormat:@"Hello @%!",name];
//message = [NSString stringWithFormat:@"Hello Girl!"];

Таким образом, сообщение освобождается в следующем цикле выполнения, k.Но что с NSString, заданным в качестве аргумента для stringWithFormat?

Выпускает ли объект класса NSString NSString @ "Hello% @" / @ "Hello Girl", заданную в качестве аргумента?Или @ "" - Konstruktor возвращает только автоматически выпущенные строки NSStrings?

1 Ответ

22 голосов
/ 20 мая 2011

Буквенная запись NSString @"" дает вам постоянные строки времени компиляции, которые находятся в их собственном пространстве памяти и имеют постоянные адреса.

Вопреки распространенному мнению, причина, по которой вы не выпускаетеЛитеральные строки не потому, что они являются частью пула автоматического выпуска.Это не так - вместо этого они проводят весь срок службы приложения в том же пространстве памяти, которое они выделяют во время компиляции, и никогда не освобождаются во время выполнения.Они удаляются только тогда, когда процесс приложения умирает.

Тем не менее, единственное время, когда вам нужно управлять константой памяти NSString s, это когда вы сохраняете или копируете их для себя.В этом случае вам следует освободить сохраненные или скопированные указатели, как и любой другой объект.

Другое дело: сами литералы не нуждаются в управлении памятью.Но если вы передадите их в качестве аргументов вспомогательным методам или инициализаторам NSString, как вы делаете с stringWithFormat:, то это те объекты, которые возвращаются методами и инициализаторами, которые обычно следуют всем правилам управления памятью.

...