代码之家  ›  专栏  ›  技术社区  ›  Brad G

我是否应该忽略通过接口生成器生成的委托引用?

  •  2
  • Brad G  · 技术社区  · 16 年前

    如果我从接口生成器将ClassB的委托属性分配给ClassA,我应该将IBoutlet分配给ClassB吗,然后在ClassA DealLoc中,通过出口将委托设置为nil?(假设ClassA是XIB的所有者…)

    1 回复  |  直到 16 年前
        1
  •  4
  •   Ole Begemann    16 年前

    简短回答:是的。

    不管您是否使用了Interface Builder,当委托对象放弃对委托对象的所有权(即释放)时,委托将自己作为委托对象的委托删除是一种良好的做法。这最迟可以在其dealloc方法中进行,但也可以在早期发生。

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

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