在 ARC 中,如果类Foo
拥有一个 ivar 并且 ivar 的代表设置为,将 ivar 的代表设置为inFoo
总是一个很好的安全预防措施,还是仅在某些情况下使用这种预防措施?nil
dealloc
问问题
81 次
2 回答
0
这取决于伊瓦尔。如果Foo
“独占”拥有它并且 ivar 对其他类不可用,则无需_ivar.delegate = nil;
在dealloc
. 但如果该对象也打算在其他类中使用,则最好将委托设置为 nil。然而,这在 Cocoa 开发中是非常罕见的情况。
答案中提到的另一种方法是始终安全并将其设置delegate
为nil
. 但我不会推荐这个。有时,通过保留委托引用,您可能会发现一个泄漏的对象,该对象试图联系拥有它的“死”委托。
于 2012-08-13T22:06:09.080 回答
0
是的。即使您没有保留大多数委托(除了一些长期存在的类,例如 CAAnimation 和 NSURLConnection),我也遇到过对象试图访问死委托的情况(最具体地说,使用 NSFetchedResultsController)。委托应该是 unsafe_unretained,所以当你的对象被释放时它们应该是 nil,因此在 dealloc 方法上消除委托是多余的,但是看看 NSFetchedResultsController 的情况,安全总比后悔好。
于 2012-08-13T22:07:32.123 回答