委托、观察者、和目标的所有权

向外委托任务的对象并不拥有委托或数据源对象的所有权。类似地,控件和单元不拥有其目标对象的所有权,通告中心也不拥有通告观察者的所有权。因此,这些框架对象都遵循保持其目标、观察者、委托、和数据源对象的约定,而是保持这些对象的一个弱引用-也就是说,存储一个对象的指针。

按照对象所有权策略的推荐,对被其它对象拥有的对象应该进行保持和无条件归档,而对被引用(但不被拥有)的对象则不进行保持,但进行有条件地归档。这个所有权策略的实际目的是为了避免循环引用,即避免两个对象互相引用的情况。保持对象会创建一个该对象的强引用,而在所有的强引用释放之前,对象不能被解除分配。如果两个对象彼此互相保持,则它们将永远不能被解除分配,因为它们之间的关联不能被打断。

如果您创建一个带有委托、数据源、观察者、和目标的Cocoa框架类的子类,则在该子类中永远不应显式保持这些对象,而应该创建这些对象的弱引用(未经保持),以及有条件地进行归档。

posted on 2011-10-19 09:34  110440  阅读(182)  评论(0编辑  收藏  举报

导航