iOS 循环引用
2019-04-17 本文已影响2人
飞不越疯人院
1. 循环应用的分类:
- 自循环引用;
- 相互循环引用;
- 多循环引用;
自循环引用:
一个对象中有一个成员变量A
; 如果给A
赋值这个对象的元对象则会造成自循环引用;
相互循环引用
类似delegate
中不用weak
修饰,而是用strong
修饰; 会造成相互引用;
多循环引用
类似相互循环引用
只不过这个是多个对象(A->B->C->D->E->A
);
2. 如何破处循环引用?
- 开发中尽量避免循环引用;
- 合适的时机手动断开循环引用;
具体方案:
__weak
日常开发中的
delegate
使用方法;
__block
MRC
下__block
修饰的对象不会增加其引用计数,从而避免循环引用
ARC
下__block
修饰的对象会被强引用, 无法避免循环引用, 需要手动解除引用;
__unsafe_unretained
修饰的对象不会增加其引用计数,从而能避免循环引用; 但是被修饰的对象释放后不会被置为
nil
,变成了野指针(区别于weak
);