問題:對於基於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;
}