2009-03-12 5 views
8

Noob вопрос:Нужны ли объекты NSString и init?

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

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

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

NSString *myString = @"Hello World"; 

NSLog(@"%@" , myString); 

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

ответ

12

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

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

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

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

EDIT:

Похоже, что это уже вопрос, который отвечает следующим образом:

Is a literal NSString autoreleased or does it need to be released?

+0

Спасибо Серджио ... Теперь я понимаю. – ChrisR

+1

Является ли конструкция '@" ... "' объявлена ​​в файле заголовка Foundation, Core Foundation или компилятор справляется с этим? – 2011-03-15 17:31:15

6

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

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