Как @ "Strings" распределяются в памяти? - PullRequest
1 голос
/ 14 декабря 2010

Мне любопытно выделение памяти для следующего кода.

NSString *myString = [NSString string];

Я знаю, что это создаст автоматически выпущенную пустую строку, @""

Что происходит, когда я звоню

myString = @"Hello world";

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

1 Ответ

8 голосов
/ 14 декабря 2010

Задаваясь вопросом, являетесь ли вы владельцем объекта, спросите себя:

Использует ли метод, который я использовал для создания этого объекта ...

  • начинаются с new?
  • начинаются с alloc?
  • содержит copy?
  • равно retain?

Если вы можете ответить «Да» на любой из них, то вы несете ответственность за вызов release или autorelease для возвращаемого объекта. (Обратите внимание, что правила для базовых базовых объектов немного отличаются. Также обратите внимание, что все, что прямо указано в документации, противоречит этому, побеждает. Документация всегда заменяет рекомендации)

В случае вашей строки ответы на все ваши вопросы - «нет», поэтому вы не несете ответственности за объект. Постоянные строки (в стиле @"foo") жестко запрограммированы в двоичном файле приложения, и не может быть освобождено. Это, однако, деталь реализации. Пока вы будете следовать правилам управления памятью, у вас все будет хорошо!

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