РЕДАКТИРОВАТЬ: init
добавлено с alloc
Вы не звоните retain
на него, но в init
вы звоните alloc
на него, так что он имеет счет удержания 1 - вы владеете им, и вы должны выпустить его в dealloc
,
Вы можете просто alloc
выпустить его и dealloc
. Вызывающий объект недвижимости может выбрать, следует ли сохранить. Другой вариант - создать объект в init
, автоматически освободить его, а затем присвоить свойству с помощью (retain)
вместо (assign)
. Таким образом, если другие места в коде alloc
и присвоить этому свойству, объект, который вы alloc
'освободите. Затем в dealloc
, то, на что он в данный момент назначен, будет освобождено.
Еще один вариант, если вы не хотите, чтобы другие устанавливали его, будет иметь свойство (readonly)
и _doubleLinkedList
iVar, а затем @synthesize doublyLinkedList = _doubleLinkedList
. Затем вы можете выделить его один раз в init
и знать, что никто другой не назначит его, а затем освободить его в dealloc
.
Хорошая аналогия в том, что когда вы сохраняете, вы привязываете к нему поводок. Несколько предметов могут поводок для этого объекта. Он освобождается только тогда, когда все сняли поводок.
Хорошее руководство для чтения:
Руководство по программированию управления памятью Apple
В частности, из этого документа, эти правила помогают:
У вас есть любой объект, который вы создаете Вы создаете объект, используя метод
имя которого начинается с «alloc», «new», «copy» или «mutableCopy» (для
Например, alloc, newObject или mutableCopy).
Вы можете вступить во владение объектом, используя удержание Полученный объект
обычно гарантированно остается действительным в методе
получено, и этот метод также может безопасно вернуть объект
Вызывающий. Вы используете сохранить в двух ситуациях: (1) В реализации
метода доступа или метода init, чтобы стать владельцем
объект, который вы хотите сохранить как значение свойства; и (2) для предотвращения
объект признан недействительным как побочный эффект какой-либо другой операции
(как объяснено в «Избегайте причинения выделения объектов, которые вы
Использование»).
Когда он вам больше не нужен, вы должны отказаться от права собственности на
принадлежащий вам объект Вы отказываетесь от права собственности на объект, отправив ему
сообщение об освобождении или сообщение об автозапуске. В терминологии какао,
поэтому отказывается от владения объектом
как «освобождение» объекта.
Вы не должны уступать право собственности на объект, которым вы не владеете This
это просто следствие предыдущих правил политики, изложенных в явном виде.