有关于 iOS 内存泄漏的几个原因

上文我们提到了检测内存泄漏的工具,下面我们就介绍一些常见的内存泄漏问题.

1. Block

关于 block 导致的循环引用问题是本人遇到的最多的导致内存泄漏的原因,相信大部分人可能都遇到过.这里我们不再对其成因进行一一赘述,只列几项需要注意的地方:

某个类将 block 作为自己的属性变量,然后该类在 block 的方法体里面又使用了该类本身(例:自定义 View,MJRefresh等).
一个单例持有的 block,并且 block 内又使用了 ViewController 这个类.

如果方法中参数是 block 或一些系统的 block 则不需要我们处理.

2. delegate

delegate 循环引用问题只需注意将代理属性修饰为 weak 即可.类似的可能有童鞋使用 superVC 这样的属性也都需要 weak.

3. NSTimer

我们都知道定时器使用完毕时需要将其停止并滞空,但是不要将这个时机放在 dealloc 里,会造成了互相等待的场景,无法释放.

4. 非 OC 对象

CGImageRef(对应调用CGImageRelease),CGContextRef(对应调用CGContextRelease),CGColorSpaceRef(对应CGColorSpaceRelease) 等,需要手动释放.

5. 踩过的其它坑

适时使用 autoReleasePool
一些系统的回调适时释放(例:UIAlertController)
viewWillAppear 对应 viewWillDisappear,不是 back 方法,说多了都是泪.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容