Всякий раз, когда мне нужно создать новую переменную NSString, я всегда выделяю и инициирую ее.
Нет, это не имеет смысла.
переменная существует с момента, когда программа обнаружит точку, в которой вы ее объявили:
NSString *myString;
Эта переменная не является строкой NSString.Это хранилище для указателя на строку NSString.Вот что указывает *
: эта переменная содержит указатель.
NSString объект существует только с момента его создания:
[[NSString alloc] init];
иуказатель на этот объект находится только в переменной с того момента, как вы его там присвоили:
myString = [[NSString alloc] init];
//Or, initializing the variable in its declaration:
NSString *myString = [[NSString alloc] init];
Таким образом, если вы собираетесь получить строковый объект откуда-то еще (например, substringWithRange:
), выможете пропустить создание новой, пустой, потому что вы просто собираетесь заменить указатель на пустую строку указателем на другую.
Иногда вы хотите создать пустую строку;например, если вы собираетесь получать несколько строк по одной (например, из NSScanner) и хотите объединить некоторые или все из них в одну большую строку, вы можете создать пустую изменяемую строку (используя alloc
и init
) и отправьте ему appendString:
сообщений для выполнения конкатенации.
Вам также необходимо release
любой объект, который вы создаете с помощью alloc
.Это одно из правил в Руководство по программированию управления памятью .