我应该委托通过Interface Builder进行的委托引用吗?

时间:2010-02-11 23:48:16

标签: objective-c cocoa delegates

如果我从InterfaceB将一个委托属性从classB分配给classA,我应该将一个IBOutlet分配给classB,那么在classA dealloc中,通过outlet将委托设置为nil吗? (假设classA是文件的XIB所有者......)

1 个答案:

答案 0 :(得分:4)

简答:是的。

无论您是否使用了Interface Builder,代理人一旦放弃委托对象的所有权(即,释放),就将其自身作为委托对象的委托删除是一种好习惯。这最近可以采用dealloc方法,但也可以在较早的时候发生。

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

因此,在父对象释放其子对象之前(通常但不总是在其dealloc方法中),它应该调用childObject.delegate = nil;

相关问题