通過Instrument檢查到是由于AFNetworking這個庫導(dǎo)致的內(nèi)存泄漏疗疟,解決方法就是:?
將AFHTTPSessionManager的實例使用單例模式獲取。
原先在網(wǎng)絡(luò)請求類中獲取AFHTTPSessionManager是通過如下方法
AFHTTPSessionManager*manager = [[AFHTTPSessionManageralloc]initWithBaseURL:[NSURLURLWithString:@""]];
此方法就是導(dǎo)致內(nèi)存泄漏的罪魁禍?zhǔn)撞咄孕枰脝卫@取AFHTTPSessionManager對象。
在AFHTTPSessionManager類中添加單例:
staticAFHTTPSessionManager*manager;
+(AFHTTPSessionManager*)sharedHttpSessionManager?{
staticdispatch_once_t?onceToken;
dispatch_once(&onceToken,?^{
manager?=?[AFHTTPSessionManagermanager];
manager.requestSerializer.timeoutInterval=10.0;
});
returnmanager;
}
AFHTTPSessionManager*manager =[[AFHTTPSessionManagersharedHttpSessionManager]initWithBaseURL:[NSURLURLWithString:@""]];
或AFHTTPSessionManager*manager = [類名 sharedHttpSessionManager];
?AFNetworking,處理數(shù)據(jù)出現(xiàn)Error Domain=NSCocoaErrorDomain Code=3840
原因在于出現(xiàn)特殊字符是AFNetworking無法解析的匣摘,會直接報錯,那么當(dāng)你在發(fā)Post請求時音榜,返回結(jié)果會直接進(jìn)如Fail代碼塊,其實在Fail中用Operation的NSString可以直接輸出接收到的數(shù)據(jù)赠叼,是String擦囊,可以清楚的看到服務(wù)器端數(shù)據(jù)有哪些含有特殊字符嘴办,但是有一些字符是不好看到的瞬场,比如“Tab”鍵打出的那種四個空格涧郊,項目中用戶有時候很常用到Tab鍵贯被,最好的方法是在AFNetworking源碼中添加字符過濾功能。
處理辦法:找到AFNetworking包中AFURLResponseSerialization.m文件刃榨,大概在第250行左右添加如下過濾方法:
BOOLisSpace = [data isEqualToData:[NSDatadataWithBytes:" "length:1]];
if(data.length>0&& !isSpace) {
????NSString* sInvalid = [NSStringstringWithUTF8String:[data bytes]];?
????// 從服務(wù)器收到的類似上一行的數(shù)據(jù)
????NSData*dataa = [[sInvalid stringByReplacingOccurrencesOfString:@"\r\n"withString:@"\\r\\n"] dataUsingEncoding:NSUTF8StringEncoding];
???? responseObject = [NSJSONSerializationJSONObjectWithData:dataa options:self.readingOptionserror:&serializationError];
}else{
????returnnil;
}