美文网首页
Q: 内存泄漏可能会出现的几种原因

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

作者: SmartGao | 来源:发表于2017-11-28 16:01 被阅读0次

    一、三方框架
    二、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: 内存泄漏可能会出现的几种原因

          本文链接:https://www.haomeiwen.com/subject/ryhebxtx.html