今天在做内存泄漏检测时,发现很多地方都有内存泄漏,而引起泄漏的原因居然AFN,
网上查了资料了解到由于ARC机制导致每当实例化Session类之后,都没有地方释放掉实例。而且
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manger并不是一个单例
又看了一遍AFN自带的Demo,发现他里面是创建了一个继承自AFHTTPSessionManager的类AFAppDotNetAPIClient ,而AFAppDotNetAPIClient里是用了单例创建的对象,代码如下:
+ (instancetype)sharedClient {
static AFAppDotNetAPIClient *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedClient = [[AFAppDotNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:AFAppDotNetAPIBaseURLString]];
_sharedClient.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
});
return _sharedClient;
}
我在项目中用了单例之后,AFN引起的内存泄漏确实没有了。