memory leak

常见原因:

1. NSTimer

target:self 增加了 viewController 的 retain count,self 强引用了 timer,timer 强引用了self,造成了循环引用,解决方案:[timer invalidate];

2. delegate

delegate 会造成和 viewController 的循环引用,解决方案:用 weak 修饰 delegate

3. block

block 会造成循环应用,解决方案:当 self 与 block 互相持有时,使用__weak/__strong;

4.非OC对象的处理

解决方案:比如队列,通过 dispatch_queue_creat 函数生成的 Dispatch Queue 在使用结束后需要通过 dispatch_release 函数释放;

5. AFN

解决方案:保证 AFHTTPSessionManager 只有一个,使用单例,但是异步会有问题,同一时间同时申请 manager 时,会有线程申请不到;

另外一种解决方案:在网络请求的 block 内把 task 取消掉,

__weak typeof(manager) weakManager = manager;

然后在成功和失败的回调中添加

[weakManager invalidateSessionCancelingTasks:YES];

6. 大次数循环

for(int i = 0;i < 1000000;i++){

    xxx

}

解决方案:

for(int i = 0;i < 1000000;i++){

    @autoreleasepool {

        xxx

    }

}

检测:

1.静态分析方法(Analyze):Xcode -> Product -> Analyze

2.动态分析方法(Leaks):Xcode -> Product -> Profile -> Leaks

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