在使用instruments做内存泄漏分析时,发现所有使用如下语句的地方都有内存泄漏,OMG:
if (!_manager) {
self.manager = [AFHTTPSessionManager manager];
}
只能找度娘了,还好找到了解决办法,有前辈给出了解决方案:
但是我所用到的网络请求不是很复杂,不想再新建类去写单例了,就把单例放在了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;
});
return manager;
}
-(AFURLSessionManager *)sharedURLSession{
static dispatch_once_t onceToken2;
dispatch_once(&onceToken2, ^{
urlsession = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
});
return urlsession;
}
获得AFHTTPSessionManager和AFURLSessionManager单例
//AFHTTPSessionManager
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
AFHTTPSessionManager *manager = [app sharedHTTPSession];
//AFURLSessionManager
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
AFURLSessionManager *urlsession = [app sharedURLSession];
全部替换完之后再用 instruments跑一遍,再也没有红叉了 ^_^ 。