原文地址: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跑一遍,再也沒有紅叉了 ^_^ 。