问题:对于基于AFNetWorking3.0的项目,在未处理直接通过AFN3.0进行网络请求,在leaks测试下会出现内存泄露的问题。
原因:观察发现每次发生泄漏的地方都是 “AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];”中,每次网络请求都初始化一个实例对象,但是未得到释放,造成了内存泄漏。
解决办法:解决方法是创建一个继承AFHTTPSessionManager的单例对象,每次网络请求都调用这个单例方法。
(下面是写在delegate中的办法,需要用到网络请求时别的不变,manager的初始化改为使用“AFHTTPSessionManager *manager = [AppDelegate shareManager];”即可)
代码如下
.h头文件中
#import "AFNetworking/AFNetworking.h"
/**
* 单利方法
*
* @return 实例对象
*/
+(AFHTTPSessionManager*)shareManager;
.m文件中
#pragma mark - shareManager
/**
* 获得全局唯一的网络请求实例单例方法
*
* @return 网络请求类的实例
*/
+(AFHTTPSessionManager *)shareManager {
static AFHTTPSessionManager *manager=nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = AFHTTPSessionManager manager];
});
return manager;
}