【问题标题】:NSOperation Data Parsing Best PracticeNSOperation 数据解析最佳实​​践
【发布时间】:2013-02-15 15:07:25
【问题描述】:

我有一个关于使用 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];
              }
          }

【问题讨论】:

    标签: objective-c json nsmutabledictionary nsoperation


    【解决方案1】:

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

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

    【讨论】:

    • 你好 GorillaPatch,看起来我的很多内存都被我正在运行的循环占用了,这些循环本来可以考虑更多以减少迭代次数。从那以后,我将内存减少到不到原来的三分之一。 CoreData 与 NSDictionaries 相比如何? CoreData 是不是类似数据库的表结构?
    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2010-09-06
    • 1970-01-01
    • 2016-09-25
    • 2010-11-10
    • 2013-04-29
    相关资源
    最近更新 更多