0

可能重复:
在 dealloc 方法中,需要或不需要任何委托到 nil

在 ARC 中,如果类Foo拥有一个 ivar 并且 ivar 的代表设置为,将 ivar 的代表设置为inFoo总是一个很好的安全预防措施,还是仅在某些情况下使用这种预防措施?nildealloc

4

2 回答 2

0

这取决于伊瓦尔。如果Foo“独占”拥有它并且 ivar 对其他类不可用,则无需_ivar.delegate = nil;dealloc. 但如果该对象也打算在其他类中使用,则最好将委托设置为 nil。然而,这在 Cocoa 开发中是非常罕见的情况。

答案中提到的另一种方法是始终安全并将其设置delegatenil. 但我不会推荐这个。有时,通过保留委托引用,您可能会发现一个泄漏的对象,该对象试图联系拥有它的“死”委托。

于 2012-08-13T22:06:09.080 回答
0

是的。即使您没有保留大多数委托(除了一些长期存在的类,例如 CAAnimation 和 NSURLConnection),我也遇到过对象试图访问死委托的情况(最具体地说,使用 NSFetchedResultsController)。委托应该是 unsafe_unretained,所以当你的对象被释放时它们应该是 nil,因此在 dealloc 方法上消除委托是多余的,但是看看 NSFetchedResultsController 的情况,安全总比后悔好。

于 2012-08-13T22:07:32.123 回答