iOS开发 循环引用的几种场景

  • delegate 循环引用
    如果delegate使用strong修饰容易引起循环引用
  • block 循环引用
    block和self的相互持有会造成循环引用
    为了避免产生循环引用,通常需要使用 weakSelf 与 strongSelf,如下
__weak typeof(self) weakSelf = self;
[self doSomeBlockJob:^{
    __strong typeof(weakSelf) strongSelf = weakSelf;
    if (strongSelf) {
        ...
    }
}];
  • NSTimer 循环引用
    timer和self的相互引用造成循环引用
    在删除对象之前,需要将timer的invalidate方法。
    [_timer invalidate];
    _timer = nil;
  • NSArray加入self造成循环引用

@interface SomeObj : NSObject
@property (nonatomic, strong)   NSMutableArray *array;
@end

[_array addObject:self];
  • 使用类别添加属性
    比如:有一个类A,给A动态添加属性p。如果p中再引用类A,容易造成循环引用

或许还有其他场景,欢迎建议、点评、指正、增加。谢谢!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2017年11月2日,我想小小的纪念一下,这是我和简书邂逅的日子。 我自认为是喜欢文字的,喜欢手帐,喜欢动漫,...
    你有猫饼吗zz阅读 190评论 0 0
  • 你想得过且过吗?你对未来的生活有规划吗?你想要做什么?你有大目标吗?这一辈子就这样吗?人过三十,突然间头脑里有...
    真峥阅读 140评论 0 0
  • 写在前面:本人刚入坑信息安全。。。属于小白,意在通过写简书的方式记录并督促学习,希望各大神高抬贵手,若有纰漏请尽情...
    Weizhou_Wang94阅读 441评论 2 1
  • 不可否认,女人都有着小聪明,总在对自己有利的情况下要求男女平等,却在要求不平等权利时高喊女权至上。
    Filler阅读 217评论 0 0