iOS中出现循环引用时常见的三种情况

来源:互联网 发布:js数组定义的方式 编辑:程序博客网 时间:2024/06/06 18:40

出现循环引用的三种情况:

    1.声明代理delegate属性

    2.使用block

    3.使用NSTimer的时候


 1.代理属性导致循环引用。

 

 解决方案就是一定要记住,在声明delegate的时候修饰为weak(ARC)或者assign(MRC)

 

 ARC环境下

 //代理属性为什么用weak,如果用strong的话会发生循环引用

 //self --> person --> delegate --> self

 

 //    self.person = [[Person alloc] init];

 //    self.person.delegate = self;

 

 

 MRC环境同理。

 

2.block导致的循环引用

这个比较复杂,我将它单独写在了一篇博文中.

block导致的循环引用问题的分析基解决办法

3.关于NSTimer导致的循环引用,我暂时不做讲解,准备充分时再补上。

NSTimer经常被作为某个类的成员变量,而NSTimer初始化时要制定self为target,容易造成循环引用。另一方面,若timer一直处于validate的状态,则其引用计数将始终大于0.





0 0