ARC原理及强弱指针
2016-01-09 16:08
113 查看
一、Xcode使用ARC来对内存进行管理,并不是像JAVA一样的垃圾回收机制,ARC不负责回收内存,而是在代码合适的地方插入合适的内存管理代码(retain、release、autorelease)。
ARC中,判断对象是否该销毁靠的是“强指针”,而不是MRC中的引用计数器,默认的指针都是强指针。所以在ARC中要提前释放一个对象,只需要设置指向该对象的指针为空即可:p = nil;因为当没有强指针指向这个对象时,这个对象就会被销毁。
__weak弱指针对所指的对象没有拥有权,一旦弱指针所指的对象销毁了,这个弱指针就会被置为nil,不会变成野指针,这也是ARC的智能之处。
注意:创建对象时,不能使用弱指针来引用,否则刚创建的对象因为被弱指针指着立马就被销毁了没有任何意义,所以创建对象一定是用强指针来引用,然后才可以将这个对象赋给其他弱指针变量使用。
注:@property (nonatomic,strong)Person *person;
@property (nonatomic,weak)Dog *dog;
strong和weak都是来修饰对象属性的,对于基本数据类型属性依然用assign来修饰。
二、循环引用
解决办法:
ARC中,判断对象是否该销毁靠的是“强指针”,而不是MRC中的引用计数器,默认的指针都是强指针。所以在ARC中要提前释放一个对象,只需要设置指向该对象的指针为空即可:p = nil;因为当没有强指针指向这个对象时,这个对象就会被销毁。
__weak弱指针对所指的对象没有拥有权,一旦弱指针所指的对象销毁了,这个弱指针就会被置为nil,不会变成野指针,这也是ARC的智能之处。
注意:创建对象时,不能使用弱指针来引用,否则刚创建的对象因为被弱指针指着立马就被销毁了没有任何意义,所以创建对象一定是用强指针来引用,然后才可以将这个对象赋给其他弱指针变量使用。
注:@property (nonatomic,strong)Person *person;
@property (nonatomic,weak)Dog *dog;
strong和weak都是来修饰对象属性的,对于基本数据类型属性依然用assign来修饰。
二、循环引用
解决办法:
相关文章推荐
- Android How to Check if the App is in Background
- (转)linux c多线程编程
- Linux下配置Lamp
- Linux下配置Lamp
- 配置chrome支持本地(file协议)ajax请求
- 静态类的原罪
- MySQL的语句执行顺序
- 常用正则表达式
- 比较触发器和约束
- Android 仿今日头条频道管理(下)(GridView之间Item的移动和拖拽)
- Apache+PHP安装与配置
- php class类的用法详细总结
- 深入研究socket编程(1)-----socket之TCP回射服务器/客户端程序
- 实践中的importPoint
- PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
- 蓝桥杯 Torry的困惑(基本型)
- spring mvc 上传图片
- Iframe 用法的详细讲解
- KlayGE
- 学习H5不错的书籍