自从ARC(自动内存管理机制)出来后,iOS开发工程师在内存管理方面节省了大量的精力和时间,不过不代表我们写的代码不会产生内存泄漏,有时候很多框架使用起来很方便,但是也需要注意他们的使用方法,不然就可能导致内存泄漏,今天来说说iOS主流的AFN网络请求框架!
那么它在什么情况下会造成内存泄漏呢?
AFN内存泄漏截图如上图造成内存泄漏的主要有两个一个是AFN导致的,还有一个就是OpenUDID框架。
那么造成AFN内存泄漏的是什么呢?
因为[AFHTTPSessionManager manager],它只是一个类方法,并不是单利,所以需要自己创建一个单利方法,避免每次请求都创建。
错误代码如下:这句是造成内存泄漏的罪魁祸首
if (client == nil) {
client = [AFHTTPSessionManager manager];
}
应该修改成这样:
+(AFHTTPSessionManager *)sharedAFNManager{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [AFHTTPSessionManager manager]; manager.requestSerializer.timeoutInterval = 10;
});
return manager;
}
...
+...{
client = [self sharedAFNManager];
}
这样调用就解决了AFN内存泄漏的问题,修改后如下图,关于AFN的内存泄漏基本上解决完毕!
修复AFN后的截图喜欢的可以关注个人的微信公众号:IT科学技术,关注不迷路,大家的支持是我前进的动力!
网友评论