AFNetWorking3.0記憶體洩漏問題,xcode檢測記憶體洩漏。
最近在寫小專案的過程中發現app在執行過程中記憶體總是會增加,沒有上限一樣到五六十兆。然後本能的開啟xcode的product--profile--leak 監測一下記憶體洩漏的地方。結果發生一堆記憶體洩漏,不過都是當我獲取網路資料的時候。
點選leaks--calltree ,勾選右邊設定的Invert Call Tree和Hide System Libraries 檢視記憶體洩漏的位置 。
可以看到如下
可以看出記憶體洩漏全是和AFNetWorking 有關 ,原因是manager類每一次網路請求都是初始化一個例項物件,但是該物件在工程中得不到釋放,造成了記憶體洩漏。我也不知道AFNetWorking的作者是怎麼想的。解決方法是建立一個繼承與AFHTTPSessionManager 的單例物件,每次網路請求都呼叫這個單例方法。
程式碼很簡單 ,作為新手要記錄每個錯誤。加油。
AFmanager.h中
#import "AFHTTPSessionManager.h"
@interface AFmanager : AFHTTPSessionManager
+(AFHTTPSessionManager *)shareManager;
@end
AFmanager.m中
+(AFHTTPSessionManager *)shareManager {
staticAFHTTPSessionManager *manager=nil;
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [AFHTTPSessionManagermanager];
// manager.requestSerializer = [AFJSONRequestSerializer serializer];
// manager.responseSerializer = [AFJSONResponseSerializer serializer];
});
return manager;
}
(將AFmanager.h 標頭檔案寫在pch檔案中)在網路請求呼叫的地方
AFHTTPSessionManager *manager = [AFmanagermanager];
完成後,一切搞定。又少了一個坑。