Установка свойства может привести к отправке уведомлений другим объектам, которые наблюдают за этим свойством. Это, в свою очередь, может привести к тому, что эти объекты попытаются что-то сделать с вашим объектом. Если вы находитесь в процессе освобождения, вероятно, это не то, чего вы хотите. Таким образом, в целом безопаснее release
соответствующая переменная экземпляра напрямую.
Обратите внимание, что проблема такого рода возникает только в определенных случаях, поэтому часто вполне возможно написать код, используя self.property=nil
в dealloc
и все работает нормально. Это просто не лучшая практика.
В Objective-C "современная среда выполнения" можно объявлять свойства, даже не задавая ivar. Среда выполнения синтезирует хранилище в соответствии с синтезированными средствами доступа. В этом случае вы не можете выпустить ivar напрямую, потому что в вашем коде его нет. Таким образом, у вас нет выбора, кроме как пойти по маршруту self.property=nil
.