Сохранять счет релиза, требуется подтверждение - PullRequest
0 голосов
/ 30 сентября 2011

То, что я передаю ссылку на вновь alloc init (ed) объект другому классу, не означает, что класс сохранил его в конструкторе, верно?

Насколько я понимаю, для того, чтобы класс что-то сохранил, ему действительно нужно отправить retain сообщение объекту. Это правильно?

В моем примере я имею в виду мой собственный класс, а не класс Apple.

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

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

Да, отправка сохраняющего сообщения сохраняет его.

Важно прочитать это руководство:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

Ниже приведен хороший набор правил. Второе правило гласит, что вы сохраняете что-то, что храните, и оно также говорит, что полученный объект гарантированно будет действителен в течение всего времени жизни этого вызова функции. Это означает, что если вы берете объект в качестве аргумента и не собираетесь хранить его в качестве свойства iVar /, то вам не нужно его сохранять.

Из связанного Apple Doc :

Вам принадлежит любой созданный вами объект

Вы создаете объект, используя метод, имя которого начинается с «alloc», «New», «copy» или «mutableCopy» (например, alloc, newObject или mutableCopy).

Вы можете вступить во владение объектом, используя команду retain

Полученный объект обычно гарантированно остается действительным в пределах метод, в котором он был получен, и этот метод также может безопасно вернуть возражать против своего призывателя. Вы используете сохранить в двух ситуациях: (1) В реализация метода доступа или метода init, чтобы владение объектом, который вы хотите сохранить в качестве значения свойства; и (2) Для предотвращения признания объекта недействительным как побочный эффект некоторых другая операция (как описано в «Избегать причинения выделения Используемые вами объекты »).

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

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

Вы не должны уступать право собственности на объект, которым вы не владеете

Это всего лишь следствие предыдущих правил политики, заявленных явно.

2 голосов
/ 30 сентября 2011

Правильно.Сохранение должно быть закодировано, иначе этого не произойдет.

...