如果我从 Interface Builder 将一个委托(delegate)属性从 classB 分配给 classA,我是否应该将 IBOutlet 分配给 classB,然后在 classA dealloc 中,通过导出将委托(delegate)设置为 nil? (假设 classA 是 XIB 文件的所有者...)
最佳答案
简短回答:是的。
无论您是否使用 Interface Builder,委托(delegate)一旦放弃(即释放)委托(delegate)对象的所有权,就将自己作为委托(delegate)对象的委托(delegate)删除,这是一个很好的做法。这可以最晚在其 dealloc 方法中发生,但也可以在更早的时间点发生。
原因:通常,委托(delegate)是委托(delegate)对象的某种父对象。很多时候,委托(delegate)对象和委托(delegate)对象的所有者是同一个对象。因为父对象通常保留子对象,为了避免循环引用,委托(delegate)(即子)对象通常不保留其委托(delegate)。在这些情况下,可能会发生委托(delegate)对象在委托(delegate)对象仍然存在时被释放的情况(如果其他对象也保留了它)。如果现在委托(delegate)对象尝试访问其委托(delegate)(不再存在),程序可能会崩溃。
因此,在父对象释放其子对象之前(通常但并非总是在其 dealloc 方法中),它应该调用 childObject.delegate = nil;
。
关于objective-c - 我应该将通过 Interface Builder 进行的委托(delegate)引用设为 nil 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248658/