Нужно ли выделять и инициализировать объекты NSString? - PullRequest
8 голосов
/ 12 марта 2009

Вопрос Noob:

В настоящее время у меня сложилось впечатление, что когда вы хотите создать объект, вам нужно alloc и init этот объект.

Однако я видел несколько примеров кодов, где объявляется объект NSString, но я не вижу сообщений alloc или init после ...

Очень простой пример:

NSString *myString = @"Hello World";

NSLog(@"%@" , myString);

Может кто-нибудь объяснить, почему это так?

Ответы [ 2 ]

12 голосов
/ 12 марта 2009

Объявление переменной не требует освобождения памяти.

Создание объектов делает. И вы создаете новый объект, только если вы вызываете alloc или copy

В вашем примере вы устанавливаете ссылку на уже существующий объект, который компилятор создает из жестко запрограммированной строки. И вам не нужно управлять его памятью, потому что вы не создали его.

Я не знаю, объясняю ли я это достаточно ясно.

EDIT:

Похоже, что на этот вопрос уже есть ответ:

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

6 голосов
/ 12 марта 2009

Когда вы встраиваете в код литерал NSString, такой как @"hello, world', компилятор выделяет для него место в вашем исполняемом файле, и он загружается в память и инициализируется при запуске вашей программы.

Поскольку это часть вашего исполняемого файла, он живет в течение всего срока службы вашего приложения. Нет необходимости сохранять или освобождать его. Переменная NSString *myString, которую вы создаете для нее, является указателем на место в памяти, куда компилятор поместил литерал NSString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...