使用AFNetworking 3 內存泄露(轉載)

原文地址:http://blog.csdn.net/d1w2hj/article/details/51793065

在使用instruments做內存泄漏分析時,發現所有使用如下語句的地方都有內存泄漏,OMG:

if(!_manager){

_manager = [AFHTTPSessionManager manager];

}

stack overflow上查了下并沒有找到好的解決方案,去github的AFN的issue區查了下,確實有幾個人提問了,但是每人給出解決方案。

沒人解決就算了,結果這貨自己莫名其妙沒泄漏了,不繼續探究為什么上次有內存泄漏。

無奈只能找度娘了,還好找到了解決辦法,有前輩給出了解決方案:

但是我所用到的網絡請求不是很復雜,不想再新建類去寫單例了,就把單例放在了AppDelegate中,用到的時候在通過AppDelegate拿。因為需要用到AFHTTPSessionManager和AFURLSessionManager,所以就各寫一個單例方法。

static AFHTTPSessionManager *manager ;static AFURLSessionManager *urlsession ;-(AFHTTPSessionManager *)sharedHTTPSession{? ? static dispatch_once_t onceToken;? ? dispatch_once(&onceToken, ^{? ? ? ? manager = [AFHTTPSessionManager manager];? ? ? ? manager.requestSerializer.timeoutInterval =10;? ? });returnmanager;}-(AFURLSessionManager *)sharedURLSession{? ? static dispatch_once_t onceToken2;? ? dispatch_once(&onceToken2, ^{? ? ? ? urlsession =[[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];? ? });returnurlsession;}

獲得AFHTTPSessionManager和AFURLSessionManager單例

//AFHTTPSessionManagerAppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication]delegate];AFHTTPSessionManager *manager = [app sharedHTTPSession];//AFURLSessionManagerAppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication]delegate];AFURLSessionManager *urlsession = [app sharedURLSession];

全部替換完之后再用 instruments跑一遍,再也沒有紅叉了 ^_^ 。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容