【发布时间】:2014-11-22 17:27:28
【问题描述】:
我正在使用 AfNetworking 2.0 中的 AFHTTPRequestOperation 从服务器获取响应数据
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 Serializer..
- (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 以更轻松地显示进度条。
感谢任何想法或提示。
【问题讨论】:
-
确切的错误是什么?
-
没有错误。说“
上的应用 意外终止。来自调试器的消息:由于内存错误而终止” -
这是以前报告过的已知问题。我更新了答案。还将为 AFNetworking 提交罚单。
-
请注意,100MB 的 JSON 可能会解析为 500MB 的 iOS 对象,可能是两倍。
标签: ios objective-c ipad cocoa-touch