jsonObjectWithData导致内存崩溃?
问题描述:
我使用AFHTTPRequestOperation服务器在AfNetworking得到响应数据2.0jsonObjectWithData导致内存崩溃?
NSURLRequest *request = [[ServiceHelper instance] getRequestData:postDict :[ServicesConfiguration GET_DOCUMENTS_URL]];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
AFHTTPRequestOperation *requestOperation = [manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary *returnData = [[ServiceHelper instance] getReturnDictionary:responseObject];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
的getReturnDictionary方法呼吁responseObject是一个简单的JSON序列..
- (NSDictionary *) getReturnDictionary : (NSData *) data {
if (data == nil) {
return [NSDictionary dictionary];
}
NSError * error = nil;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (error != nil) {
NSLog(@"Error parsing JSON: %@",error);
return [NSDictionary dictionary];
}
else
return jsonDict;
}
这工作得很好少量的数据。但是,当响应对象是像100MB,应用程序挂起
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
,然后在约15秒后,该应用程序崩溃由于存储器错误。 我认为它的数据大小非常自我解释,但它不应该能够处理它?
如果我直接从[NSURLConnection sendSynchronousRequest:]获取数据; - 它没有挂起或崩溃的作品。由于这是我最初做的 - 但切换到AFNetworking更容易显示进度条。
任何想法或技巧值得赞赏。
答
更新: 所以你有2个选项来解决这个问题:
块引用
使用NSJSONReadingMutableContainers作为选项
块引用
如果以前不不工作,你都面临着类似下面的已知问题:
iOS Download & Parsing Large JSON responses is causing CFData (store) leaks
所以,现在你有两个选择:
- 使用原生JSON序列化
- 首先,JSON文件下载到硬盘,而无需使用AFNetworking而不是解析。
什么是确切的错误? – 2014-09-28 02:04:46
没有错误。说:“上的应用程序意外终止。调试器发出的消息:由于存储器错误而终止” –
nserror
2014-09-28 02:33:25
这是一种已知的问题,这是以前报告过的。我更新了回答。还将为AFNetworking提交一张票。 – bllakjakk 2014-09-28 03:17:22