美文网首页
iOS 常见的三种循环引用

iOS 常见的三种循环引用

作者: 末上 | 来源:发表于2018-06-21 14:30 被阅读20次

    1. delegate

    delegate 是iOS中开发中最常遇到的循环引用,一般在声明delegate的时候都要使用弱引用weak或者assign当然怎么选择使用assign还是weak,MRC的话只能用assign,在ARC的情况下最好使用weak,因为weak修饰的变量在释放后自动指向nil,防止野指针存在

    2.block

    当某个类将block作为自己的属性变量,然后该类在block的方法体里面又使用了该类本身就产生了循环引用问题解决办法: 通过 __weak__block 去声明一个弱引self

    _weak typeof(self) weakSelf =self;

    self.blkA = ^{

    //加一下强引用,避免weakSelf被释放掉

    __strong typeof(weakSelf) strongSelf = weakSelf;//不会导致循环引用.

    NSLog(@"%@", strongSelf->_xxView); 

    };

    3.NSTimer

    当你创建使用NSTimer的时候,NSTimer会默认对当前self有个强引用,所以在self使用完成打算释放的时候,一定要先使用NSTimer的invalidate来停止,释放时间控制对self的引用[_timer invalidate];

    相关文章

      网友评论

          本文标题:iOS 常见的三种循环引用

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