Q: 内存泄漏可能会出现的几种原因

一、三方框架
二、Block循环引用
三、delegate循环引用
四、NSTimer循环引用
五、非OC对象
六、地图类
七、大次数循环内存暴增

一、AFNet(三方框架)
如 AFNet 的作者已经在 git 上指出建议使用者在相同配置下保证 AFHTTPSessionManager 只有一个,进行全局管理,因此我们可以通过单例形式进行解决。

二、Block 循环引用

self.block = ^{
      调用self或其所属属性,要小心闭环的出现。
      [self func];
};
__weak typeof(self) weakself = self;
self.block = ^{
      __strong typeof(self) strongself = weakself;
      [strongself func];
};

三、delegate 循环引用
需要注意互相强引用内存无法释放的问题
@property (nonatomic, weak) id delegate;

四、NSTimer
不能在 dealloc 方法中执行 定时器停止并滞空的操作,这样会造成互相等待的场景。需要注意调用时机从而避免内存无法释放。

五、非OC对象内存处理
如滤镜处理
CGImageRef
需要手动内存释放
CGImageRelease()

C中的malloc 需要 free

六、地图类
使用完毕时将地图、代理等滞空为nil,地图中标注(大头钉)的复用,并且在使用完清空标注数组等。

七、大次数循环
@autoreleasepool {}

你可能感兴趣的:(Q: 内存泄漏可能会出现的几种原因)