Использование сеттеров / мутаторов в dealloc - PullRequest
1 голос
/ 07 октября 2010

Если говорить точнее, я говорю о написании dealloc следующим образом:

-(void)dealloc 
{
    self.myvar = nil;
    [super dealloc];
}

Я понимаю, что это противоречит рекомендациям Apple.Я также понимаю, что это может вызвать выдачу с KVO, а также с использованием установщика на частично освобожденном объекте.Но если я делаю вызовы в таком порядке (то есть: сначала сеттеры, а затем [super dealloc]), есть ли риск в этом?Я пытаюсь точно понять, в чем опасность, и в частности, почему это плохая вещь (тм).Спасибо ....

Ответы [ 2 ]

6 голосов
/ 07 октября 2010

Как правило, установщик может потребовать / получить доступ к другой переменной экземпляра, что может вызвать Bad Mojo, если вы уже удалили его. Есть ли конкретная причина, по которой вы не хотите использовать [myvar release]?

2 голосов
/ 07 октября 2010

в дополнение к указанным причинам (которые могут означать UB или катастрофу), вы можете получить объекты, восстанавливающие себя, и неестественные циклы зависимостей (например, среди подклассов, которые переопределяют методы доступа) - подклассы могут устанавливать свои собственные зависимости, хотяивары подкласса (эффективно) находятся вне досягаемости и не должны быть известны суперклассу.это может серьезно ограничить удобство использования ваших объектов для подклассов и нарушить их реализацию (потому что их реализация может ожидать взлома или может пройти через некоторую форму воскресения).это все, чего вы хотите избежать, и вам следует избегать доступа в init… по тем же причинам.в больших системах это становится уродливым и сложным в обслуживании - хотя проблемы легко избежать.

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