我对使用NSOperation下载数据的最佳做法有疑问。目前我正在使用NSOperationQueue在远程服务器上发出多个JSON数据请求。当数据进入时,我将它分成一个大的NSDictionary并使用for循环来解析它并在继续下一个请求之前将数据加载到NSMutableDictionaries中。我的问题是我一遍又一遍地执行这个相同的序列,我想知道是否更好的想法只是下载数据并在完成所有下载之后,然后将我的JSON解析为所需的字典,也许有更好的方法来做到这一点,我只是没想到? 我使用仪器检查了总分配情况,看起来在这个过程中我正在筹集大约30mb。
会对此事提出任何建议。
以下是NSOperation Code的一小部分样本
plantPackKeys = [NSMutableDictionary dictionaryWithDictionary:data];
queueTwo = [NSOperationQueue new];
[queueTwo setMaxConcurrentOperationCount:4];
for(id key in data){
@autoreleasepool {
urlKey = @"";
urlKey = [data objectForKey:key];
DownloadOperation *downLoad = [[DownloadOperation alloc] initWithURL:[NSURL URLWithString:urlKey]];
[downLoad addObserver:self forKeyPath:@"isFinished" options:NSKeyValueObservingOptionNew context:NULL];
[queueTwo addOperation:downLoad];
}
}
答案 0 :(得分:1)
知道哪些对象消耗了这么多内存会很有趣。您可以通过分解服务器中的数据包来减少内存占用。另一个问题是你真的需要在内存中保留那么多数据吗?
您可以使用其他后端(如CoreData或原始SQLite)在解析数据时将数据保存到磁盘。优点是您不必一次性加载内存中的所有内容,这是序列化NSDictionaries的情况。