Ios jsonObjectWithData导致内存崩溃?
我正在使用AfNetworking 2.0中的AFHTTPRequestOperation从服务器获取响应数据Ios jsonObjectWithData导致内存崩溃?,ios,objective-c,ipad,cocoa-touch,Ios,Objective C,Ipad,Cocoa Touch,我正在使用AfNetworking 2.0中的AFHTTPRequestOperation从服务器获取响应数据 NSURLRequest *request = [[ServiceHelper instance] getRequestData:postDict :[ServicesConfiguration GET_DOCUMENTS_URL]]; AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationMan
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);
}];
在responseObject上调用的getReturnDictionary方法是一个简单的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以更容易地显示进度条
欢迎您提供任何想法或建议。更新:
因此,您有两个选项来解决此问题:
大宗报价
使用NSJSONReadingMutableContainers作为选项
大宗报价
如果“上一步”不起作用,您将面临如下已知问题:
现在您有两种选择:
使用本机JSON序列化
首先将JSON文件下载到磁盘,而不使用AFNetworking和parse。
准确的错误是什么?没有错误。表示上的应用程序意外终止。来自调试器的消息:由于内存错误而终止。这是以前报告的一种已知问题。我更新了answe。还将提交AFNetworking的票证。请注意,100MB的JSON将解析为500MB的iOS对象,可能是这一数字的两倍。