2010-02-11 57 views

回答

4

简短的回答:是的。

无论您是否使用Interface Builder,只要委托人放弃委托对象的所有权(即释放)委托人即可将其本身作为委托对象的委托移除。这可以最迟在其dealloc方法中,但它也可以在更早的时候发生。

原因:通常情况下,代表某种委派对象的父对象。很多时候,委托和委托对象的所有者是同一个对象。因为父对象通常保留子对象,所以为了避免循环引用,委托(即子对象)对象通常不保留其委托。在这些情况下,可能会发生委托对象在委托对象仍然存活的情况下被取消分配(如果其他对象也保留了它)。如果现在委托对象试图访问它的委托(它不再存在),程序可能会崩溃。

父对象释放其子对象之前(通常,但并非总是如此,在其dealloc方法),它应该调用childObject.delegate = nil;所以,正确的。

+2

除非你真正的委托是你不应该丧失已在'delegate'属性: '如果([otherObject代表] ==个体经营)[otherObject setDelegate:无];' – 2010-02-13 02:03:19

+0

+1杰里米。感谢您的更正。 – 2010-02-13 07:13:24

+0

1)Interface Builder设置了连接,所以不应该为它的设置负责? 2)父对象可能甚至没有对委托对象的引用,因为它是在Interface Builder中创建的,没有明确的出口。那么你如何解除其委托? – user102008 2012-04-10 18:07:40

相关问题