1. 程式人生 > >AFNetWorking3.0記憶體洩漏問題,xcode檢測記憶體洩漏。

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];

       

完成後,一切搞定。又少了一個坑。