原文地址:http://blog.csdn.net/d1w2hj/article/details/51793065
在使用instruments做內(nèi)存泄漏分析時(shí),發(fā)現(xiàn)所有使用如下語(yǔ)句的地方都有內(nèi)存泄漏,OMG:
if(!_manager){
_manager = [AFHTTPSessionManager manager];
}
stack overflow上查了下并沒(méi)有找到好的解決方案,去github的AFN的issue區(qū)查了下,確實(shí)有幾個(gè)人提問(wèn)了,但是每人給出解決方案。
沒(méi)人解決就算了,結(jié)果這貨自己莫名其妙沒(méi)泄漏了,不繼續(xù)探究為什么上次有內(nèi)存泄漏。
無(wú)奈只能找度娘了,還好找到了解決辦法,有前輩給出了解決方案:
但是我所用到的網(wǎng)絡(luò)請(qǐng)求不是很復(fù)雜,不想再新建類去寫(xiě)單例了,就把單例放在了AppDelegate中,用到的時(shí)候在通過(guò)AppDelegate拿。因?yàn)樾枰玫紸FHTTPSessionManager和AFURLSessionManager,所以就各寫(xiě)一個(gè)單例方法。
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跑一遍,再也沒(méi)有紅叉了 ^_^ 。