黑马程序员-循环引用问题和weak
使用weak reference(弱引用)来避免retain cycle
对一个对象发送retain消息会创建对这个对象的强引用(strong reference)。如果两个对象都有一个强引用指向对方,那么就形成了一个环(retain cycle)。这个环使得这两个对象都不可能被release。
例子:
int main(int argc, const charchar * argv[]) { 
    Person *p = [[Person alloc] init]; 
    Dog *dog = [[Dog alloc] init]; 
    [p setDog:dog];//dog计数:2 
    [dog setPerson:p];//person计数:2 
    [p release]; //person计数:1 
[dog release];//dog计数:1 
当在dog和person的property方法中利用retain时就会 导致循环使用。
弱引用(weak reference)指的是一种non-owning(非拥有)的关系,比如简单指针赋值关系。使用弱引用避免了retain cycle。但是需要注意的是,弱引用不能保证弱引用指向的对象是否存在,所以发消息给这个对象时一定要小心。如果弱引用指向的对象已经释放,那么发送消息给它会导致程序崩溃。所以,需要一点点额外的操作来使用弱引用所指的对象。比如,当向notification center注册一个对象时,notification center保存了一个指向这个对象的弱引用。当这个对象被回收时,需要通知下notification center。
在getter方法中避免循环套用,避免在getter方法中再用getter方法。例如if(self.age=nil)的错误判断。应为self.age也是一个getter方法。导致循环使用。
黑马程序员-循环引用问题和weak的更多相关文章
- 黑马程序员—C语言的函数、数组、字符串
		------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ... 
- 黑马程序员:轻松精通Java学习路线连载1-基础篇!
		编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ... 
- 黑马程序员——【Java高新技术】——代理
		---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ... 
- 黑马程序员:Java基础总结----泛型(高级)
		黑马程序员:Java基础总结 泛型(高级) ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ... 
- 黑马程序员:Java基础总结----类加载器
		黑马程序员:Java基础总结 类加载器 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ... 
- 黑马程序员:Java基础总结----GUI&网络&IO综合开发
		黑马程序员:Java基础总结 GUI&网络&IO综合开发 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络架构 C/S:Client/Server ... 
- 【黑马程序员C++ STL】学习记录
		黑马程序员 2017 C++ STL 教程(STL 部分已完结) 基于黑马STL课程整理:黑马程序员2017C++STL教程 视频链接 专栏:本STL专栏目录 文章目录 黑马程序员 2017 C++ ... 
- 黑马程序员+SQL基础(上)
		黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ... 
- 黑马程序员+Winform基础(上)
		黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ... 
- 黑马程序员:Java基础总结----静态代理模式&动态代理
		黑马程序员:Java基础总结 静态代理模式&动态代理 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public class Ts { ... 
随机推荐
- CC1310电源管脚
			对于48pin脚的CC1310而言,属于电源类的管脚如下: 上述电源类管脚的关系如下: 1 VDDS类管脚 VDDS类管脚包括VDDS.VDDS2.VDDS3和VDDS_DCDC四个管脚.其中VDDS ... 
- HDU 1285 确定比赛名次   拓扑排序模板题
			http://acm.hdu.edu.cn/showproblem.php?pid=1285 #include <cstdio> #include <cstdlib> #inc ... 
- [Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?
			首先,问题是如何出现的? 晚上复查代码,发现一个activity没有调用自己的ondestroy方法 我表示非常的费解,于是我检查了下代码. 发现再finish代码之后接了如下代码 finish(); ... 
- ABP JTable如何手动刷新子表数据
			function getSubMaster() { _$masterTable.find('.jtable-child-table-container').jtable('reload'); } 
- js-url打开方式
			引用自 : 老张的博客 *.location.href 用法: top.location.href="url" 在顶层页面打开url(跳出框架) self.loc ... 
- 用grunt进行前端工程化之路
			我们的项目wecash4.0的前端构建考虑过用fis和grunt. 目录: 前期调研:fis vs grunt vs gulp? 一.安装grunt和项目. fis是百度fex研发的构建工具,非常方便 ... 
- ABP的语言切换
			在ABP官网http://www.aspnetboilerplate.com/创建一个Multi Page Web Application项目并打开,在Web项目下可以找到一个Controllers/ ... 
- Unix权限管理
			// */ // ]]> Unix权限管理 Table of Contents 1 Unix权限管理 2 进程权限 3 文件权限 4 进程对文件的存取访问的权限校验过程 1 Unix权限管理 权 ... 
- Caffe入门与应用 by GX
			深度学习几大工具:Theano(基于python),Torch,Caffe(用c++写的),Tensor flow,CNTK:caffe是比较流行的深度学习的框架 caffe特点:特别适合于新手,由于 ... 
- 游标的使用之压缩数据库Log文件
			declare @databasename nvarchar(100)--定义游标以及赋值 获取所有Online的Database Namedeclare getDataBaseCursor cur ... 
