0

我对使用 NSOperation 下载数据的最佳实践有疑问。目前我正在使用 NSOperationQueue 在远程服务器上对 JSON 数据发出多个请求。当数据进来时,我将它分解成一个大的 NSDictionary 并使用 for 循环来解析它并将数据加载到 NSMutableDictionaries 中,然后再继续下一个请求。我的问题是我一遍又一遍地执行相同的序列,我想知道是否最好只下载数据并在完成所有下载之后,然后将我的 JSON 解析为所需的字典,也许有更好的方法来做到这一点,我只是没有想到?我使用工具检查了总分配,看起来我在这个过程中堆积了大约 30mb。

非常感谢您就此事提供任何建议。

这是 NSOperation 代码的一个小示例

          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];
              }
          }
4

1 回答 1

1

知道哪些对象正在消耗这么多内存会很有趣。您可以通过分解来自服务器的数据包来减少内存占用。另一个问题是你真的需要在内存中保留这么多数据吗?

您可以使用其他一些后端(例如 CoreData 或原始 SQLite)在解析数据时将其保存到磁盘。优点是您不会一次将所有内容加载到内存中,序列化的 NSDictionaries 就是这种情况。

于 2013-02-15T18:07:25.553 回答