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

你可能感兴趣的:(memory leak)