美文网首页
知识点积累---容易造成循环引用的几种情况

知识点积累---容易造成循环引用的几种情况

作者: summer_code | 来源:发表于2017-02-22 18:09 被阅读4次

    循环引用是指 一个对象A持有了B 而B又持有了A  这样就容易早晨循环引用.双方都同时保持对方的一个引用,导致任何时候引用计数都不为0,始终无法释放  若当前对象是一个ViewController,则在dismiss或者pop之后其dealloc无法被调用,在频繁的push或者present之后内存暴增

    一:声明代理delegate属性

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

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

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

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

        self.person.delegate = self;

    二:使用NStimer时:

    当NStimer作为某个类的成员属性是会发生循环引用。设置为成员属性是有一个self对timer的强引用, 在实例timer的时候一般指定的target为:self。这样就造成了循环引用,

    解决办法:

    //停止定时器

    [self.myTimer invalidate];

    //销毁timer

    self.myTimer = nil;

    注: NStimer停止后是不能再开启的,所以使用的时候 停止timer后设为nil。再在使用的地方创建一个nstimer就好。

    三:使用block时:

    相关文章

      网友评论

          本文标题:知识点积累---容易造成循环引用的几种情况

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