Ответ 1
Литеральная нотация NSString
@""
дает вам константные строки времени компиляции, которые находятся в их собственном пространстве памяти и имеют постоянные адреса.
Вопреки распространенному мнению, причина, по которой вы не выпускаете литеральные строки, заключается не в том, что они являются частью пула авторесурсов. Их нет - вместо этого они тратят всю жизнь приложения в том же пространстве памяти, которое они выделяют во время компиляции, и никогда не освобождаются во время выполнения. Они удаляются только при окончании процесса приложения.
Тем не менее, единственный раз, когда вам нужно управлять памятью постоянным NSString
, является то, когда вы сохраняете или копируете их для себя. В этом случае вы должны освободить ваши сохраненные или скопированные указатели, как и любой другой объект.
Другое дело: это сами литералы, которым не требуется управление памятью. Но если вы передадите их в качестве аргументов в методах или инициализаторах NSString
, например, с помощью stringWithFormat:
, тогда это те объекты, которые возвращаются методами и инициализаторами, которые обычно соблюдают все правила управления памятью.