OC-三种常见的循环引用

介绍:

循环引用是指多个对象相互引用,导致内存无法释放,从而导致内存泄漏!

情况一:delegate

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

情况二:block

当某个类将block作为自己的属性变量,然后该类在block的方法体里面又使用了该类本身就产生了
循环引用问题
解决办法: 
通过 __weak  __block 去声明一个弱引用的self 
_weak typeof(self) weakSelf = self;
self.blkA = ^{
//加一下强引用,避免weakSelf被释放掉
__strong typeof(weakSelf) strongSelf = weakSelf;
//不会导致循环引用.
NSLog(@"%@", strongSelf->_xxView); 
};

情况三:NSTimer

当你创建使用NSTimer的时候,NSTimer会默认对当前self有个强引用,所以在self使用完成打算
释放的时候,一定要先使用NSTimer的invalidate来停止,释放时间控制对self的引用
[_timer invalidate];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容