关于AFNetWorking3.0内存泄漏的问题

问题:对于基于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;

}

posted @ 2017-07-07 10:44  鸢一  阅读(1361)  评论(0编辑  收藏  举报