iOS中的循环引用问题

如题,最近检查代码,慢慢的填之前挖过的坑,发现之前写的代码真是差到不忍直视。发现很多循环引用问题。

容易引起循环引用的问题总结

  • 1.delegate的写法,应按照如下写法,切记不可存在strong标示符。
@property (nonatomic, weak, nullable) id <UICollectionViewDelegate> delegate;
@property (nonatomic, weak, nullable) id <UICollectionViewDataSource> dataSource;
  • 2.单例里面的变量。
    错误写法,然后将self传入,导致释放不掉。
@property (nonatomic,strong) UIViewController *mViewController;
  • 3.block里面注意弱引用self即可。
  • 4.传值时注意被赋值的变量。
UIViewController *vc;//默认为strong类型,同样可写为UIViewController __strong *vc
UIViewController __weak *vc;//通过__weak弱引用变量。

5.NSTimer
会对传入的target强引用,具体参看Weak Reference to NSTimer Target To Prevent Retain Cycle
解决办法有两个:
a.GCD完成NSTimer的功能
https://github.com/mindsnacks/MSWeakTimer
b.用一个中间对象处理
YYWeakProxy

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

推荐阅读更多精彩内容