美文网首页
问题:描述一个你所遇到retain cycle例子

问题:描述一个你所遇到retain cycle例子

作者: 姜小舟 | 来源:发表于2020-05-13 18:52 被阅读0次

循环引用的常见的三种场景

  • delegate
    在委托问题上出现循环引用问题已经是老生常谈了,规避该问题的杀手锏也是简单到哭:声明delegate时请用assign(MRC)或者weak(ARC),千万别手贱玩一下retain或者strong,毕竟这基本逃不掉循环引用了!

  • block
    block在copy时都会对block内部用到的对象进行强引用(ARC)或者retainCount增1(非ARC)。在ARC与非ARC环境下对block使用不当都会引起循环引用问题,一般表现为,某个类将block作为自己的属性变量,然后该类在block的方法体里面又使用了该类本身,简单说就是

    self.someBlock = ^(Type var){
        [self dosomething];
        //或者
        self.otherVar = XXX;
        //或者
        _otherVar = ...
    };
    

    block的这种循环引用会被编译器捕捉到并及时提醒。

  • NSTimer
    timer都会对它的target进行retain,我们需要小心对待这个target的生命周期问题,尤其是重复性的timer。(NSTimer初始化后,self的retainCount加1。 那么,我们需要在释放这个类之前,执行[timer invalidate];否则,不会执行该类的dealloc方法。)

相关文章

网友评论

      本文标题:问题:描述一个你所遇到retain cycle例子

      本文链接:https://www.haomeiwen.com/subject/kdbgnhtx.html