使用AFNetworking 3 内存泄露(转载)

原文地址:http://blog.csdn.net/d1w2hj/article/details/51793065

在使用instruments做内存泄漏分析时,发现所有使用如下语句的地方都有内存泄漏,OMG:

if(!_manager){

_manager = [AFHTTPSessionManager manager];

}

stack overflow上查了下并没有找到好的解决方案,去github的AFN的issue区查了下,确实有几个人提问了,但是每人给出解决方案。

使用AFNetworking 3 内存泄露(转载)
使用AFNetworking 3 内存泄露(转载)

没人解决就算了,结果这货自己莫名其妙没泄漏了,不继续探究为什么上次有内存泄漏。

使用AFNetworking 3 内存泄露(转载)

无奈只能找度娘了,还好找到了解决办法,有前辈给出了解决方案:

使用AFNetworking 3 内存泄露(转载)

但是我所用到的网络请求不是很复杂,不想再新建类去写单例了,就把单例放在了AppDelegate中,用到的时候在通过AppDelegate拿。因为需要用到AFHTTPSessionManager和AFURLSessionManager,所以就各写一个单例方法。

static AFHTTPSessionManager *manager ;static AFURLSessionManager *urlsession ;-(AFHTTPSessionManager *)sharedHTTPSession{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        manager = [AFHTTPSessionManager manager];        manager.requestSerializer.timeoutInterval =10;    });returnmanager;}-(AFURLSessionManager *)sharedURLSession{    static dispatch_once_t onceToken2;    dispatch_once(&onceToken2, ^{        urlsession =[[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];    });returnurlsession;}

获得AFHTTPSessionManager和AFURLSessionManager单例

//AFHTTPSessionManagerAppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication]delegate];AFHTTPSessionManager *manager = [app sharedHTTPSession];//AFURLSessionManagerAppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication]delegate];AFURLSessionManager *urlsession = [app sharedURLSession];

全部替换完之后再用 instruments跑一遍,再也没有红叉了 ^_^ 。

上一篇:我连我们80岁的样子都想好了,我们还是分手了


下一篇:Photoshop 紫色荷花