AFNetWorking 内存泄漏的问题 -- AFHTTPSessionManager --Instruments体检结果分享
image
今天用Instruments对APP做了下体检,结果如下:
1、CPU占用最大的一个加载动画,原因是这个加载动画用到了CoreGraphics核心绘图中的transform,不断改变UIView的形状,发现这个绘制还是很占CPU的,以后这种动画还是得慎用,影响APP性能;
2、虚拟内存的使用最大的是SDWebImage,可能本身我们的APP就图片内容最多;
3、内存泄漏问题:发现用到AFHTTPSessionManager的地方发生了很大的内存泄漏,每一次网络请求都会报错,而且都会一把很大的❌(如上图),就在网上搜索一下了,并进行了总结。原因是每次网络请求的时候都重新
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
创建了一下,导致接口请求完之后一直没有得到释放。最后把AFHTTPSessionManager这个对象我做成了单例的,也就是每次请求接口的时候都是用的一个manager。改完之后调试OK,之前的❌❌都不见了。还是有效果的,下面把单例创建的代码贴一下,有问题可留言一起探讨。
static AFHTTPSessionManager *manager;
+ (AFHTTPSessionManager *)sharedManager {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 初始化请求管理类
manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
// 设置15秒超时 - 取消请求
manager.requestSerializer.timeoutInterval = 15.0;
// 编码
manager.requestSerializer.stringEncoding = NSUTF8StringEncoding;
// 缓存策略
manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
manager.responseSerializer = [AFJSONResponseSerializer serializer];
// 支持内容格式
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/plain", @"text/javascript", @"text/json", @"text/html", nil];
});
return manager;
}
使用的时候就如下一句代码即可
AFHTTPSessionManager *manager = [ZLHttpTool sharedManager];