保留一个对象创建了一个对该对象的“强”引用。一个对象只有在它的所有强引用都被释放后才能被回收。因此,一个对象的生命周期取决于其强引用的所有者。在某些情况下,这种行为可能并不理想。您可能想要引用一个对象而不妨碍对象本身的回收。对于这种情况,您可以获取一个“弱”引用。弱引用是通过存储一个指向对象的指针创建的,而不是保留对象。
弱引用在可能会出现循环引用的情况下是必不可少的。例如,如果对象A和对象B互相通信,两者都需要引用对方。如果每个对象都保留对方对象,那么总有一个先release对方,假如A先release B,那么B就来不及releaseA,那么A就会闲置内存资源,造成浪费。所以弱引用在这里就大显身手了。为了打破这种循环,其中一个对象需要扮演从属角色,得到另一个对象的一个弱引用。举个具体的例子,在视图层次中,父视图拥有其子视图,也因此能够保留子视图,但父视图并不归子视图所有;然而子视图仍需要知道谁是它的父视图,因此它保持一个对其父视图的弱引用。
Cocoa中弱引用的其他适用情况包括:表格数据源,大纲视图项,通知观察者以及其余项目标和委托,但不仅限于上述情况。
在向您弱引用的对象发送消息时,您需要小心谨慎。如果您在一个对象被回收之后向它发送消息,您的应用程序将会崩溃。您必须为对象何时有效制定有明确界定的条件。在大多数情况下,被弱引用的对象知道其他对象对它的弱引用,这和循环引用的情况是一样的,并且它还能够在自己被回收时通知其他对象。例如,当您向通知中心注册一个对象的时候,通知中心会存储一个对该对象的弱引用,并且在适当的消息发布时,还会向该对象发送消息。当对象被回收时,您需要向通知中心解注册该对象,以防通知中心向这个已经不存在的对象继续发送消息。同样,当一个委托对象被回收时,您需要通过向其他对象发送一条带nil参数的setDelegate:消息来删除委托链接。这些消息通常由对象的dealloc方法发出。
from:http://blog.sina.com.cn/s/blog_6ffab5d401010hex.html
分享到:
相关推荐
深入探讨C++中的引用和ASSERT断言,对引用和断言的理解会有很大的帮助
我们研究了在CP守恒的2HDM I型和II型中,CP甚至是希格斯玻色子中的任何一个都被识别为类似SM的希格斯玻色子的情况,可能会发生强一阶电弱相变。 我们对经过环路校正的希格斯电势进行的重新归一化使我们能够高效地...
深入探讨C++中的引用,引用,const,多态,指针 int a ; const int &ra=a; ra=1; //错误 a=1; //正确
IQ讯号之剖析与探讨
5G安全与管控技术探讨,主要介绍相关需求,方案、对需要刚刚接触5有帮助,对初步了解5G技术有帮助;对5G技术的安全技术进行探讨;
数字孪生智慧城市概念与建设要点探讨.pdf
计算机网络安全技术发展与防火墙技术探讨 专家论文,该文章深入浅出的讲解了计算机网络安全技术发展与防火墙技术,可以作为毕业论文参考,也可以作为您研究的参考!
中医与人工智能的探讨.pdf
MFC程序设计详细实例 第15章 Doc与View探讨MFC程序设计详细实例 第15章 Doc与View探讨MFC程序设计详细实例 第15章 Doc与View探讨MFC程序设计详细实例 第15章 Doc与View探讨MFC程序设计详细实例 第15章 Doc与View探讨...
融媒体时代增强周刊互动性的实践与探讨.docx融媒体时代增强周刊互动性的实践与探讨.docx融媒体时代增强周刊互动性的实践与探讨.docx融媒体时代增强周刊互动性的实践与探讨.docx融媒体时代增强周刊互动性的实践与探讨...
汽车渠道专题之一:变革背景下,整车厂渠道终端纪实与探讨.pdf
新型工业互联网标识解析体系探讨与实践.pdf
言归正传,咱还是先来探讨探讨这二者之间有什么区别吧。记得有一次电话面试中,我直接跟面试官说:“值类型是现金, 引用类型是存折”,后来想想当时说这话虽是有点儿冲动地脱口而出,但也没什么不妥。我这人不善于...
回溯法与分支限界法的用法取向探讨
深入探讨C++中的引用,分清楚它与其他引用的区别
引用DRGs之综合指数法评价医院医疗服务质量探讨.pdf
探讨如何加强事业单位部门预算与会计核算的相互协调
新能源汽车电气技术关键问题探讨与分析.pdf
加强IT提升内控与内稽效能的路径探讨