關於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;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM