循环引用在ARC下和在MRC下都会出现问题
问题描述: 两个对象互相引用,导致他们的引用计数都为1,就会造成不会被释放
ARC下:两个对象一个使用 weak修饰,一个使用strong
MRC下:两个对象一个使用retain修饰,一个使用assign
文件1
文件2
文件3
@property在ARC机制下 和 在MRC机制下的比较
1. nonatomic nonatomic
2. atomic atomic
3. readwrite readwrite
4. readonly readonly
5. assign assign
6. strong retain
7. weak assign
8. copy copy
ARC的使用特点及注意事项
1.ARC特点总结
(1) 不允许调用 release ,retain ,retainCount
(2) 允许重写dealloc ,但是不允许调用[super dealloc]
(3) @property参数:
strong: 相当于原来的retain(适用于OC对象类型),成员变量是强指针
weak : 相当于原来的assign,(适用于OC对象类型),成员变量是弱指针
assign: 适用于非OC对象类型(基础类型)
2.ARC使用注意事项
(1) ARC中,只要弱指针指向的对象不存在了,就直接吧弱指针做清空(赋值nil)操作
(2) __weak Person *p = [[Person alloc] init];
不合理,对象一创建出来就被释放掉,ARC会把指针设置为nil
即使此时我们使用p调用eat方法,那么它也不会报错,因为执行的是[nil eat]
(3) 如果换成是弱指针,则换成weak,不需要加__