我在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以更容易地显示进度条。
任何想法或提示都表示赞赏。
答案 0 :(得分:0)
更新: 所以你有两个选择来解决这个问题:
块引用
使用NSJSONReadingMutableContainers作为选项
块引用
如果以前不起作用,您将遇到如下所示的已知问题:
iOS Download & Parsing Large JSON responses is causing CFData (store) leaks
所以现在你有两个选择: