可能重复:
In dealloc method set any delegate to nil is needed or not needed
在ARC中,如果班级Foo
拥有一个ivar且该ivar的委托设置为Foo
,那么将{iv}的委托设置为nil
dealloc
始终是一个很好的安全预防措施或者这种预防措施仅在某些情况下使用?
答案 0 :(得分:0)
这取决于伊娃。如果Foo
“完全”拥有它并且其他类无法使用ivar,则无需_ivar.delegate = nil;
中的dealloc
。但是如果该对象也打算在其他类中使用,则最好将委托设置为nil。然而,这是可可开发中非常罕见的情况。
答案中提到的另一种方法是始终保持安全并将delegate
设置为nil
。但我不建议这样做。有时,通过离开委托引用,您可能会发现一个泄漏的对象,它试图联系拥有它的“死”代表。
答案 1 :(得分:0)
是。即使你没有保留大多数代表(除了在CAAnimation和NSURLConnection等一些时间存在的类中),我遇到了一个对象试图访问死委托的情况(更具体地说,使用NSFetchedResultsController)。代理应该是unsafe_unretained,所以当你的对象被释放时它们应该是nil,因此在dealloc方法上消除委托是多余的,但是看看NSFetchedResultsController的情况,最好是安全而不是抱歉。