2013-02-15 2 views
0

У меня вопрос о наилучшей практике при загрузке данных с использованием NSOperation. В настоящее время я использую NSOperationQueue для выполнения нескольких запросов на данные JSON на удаленном сервере. Когда данные поступают, я разбиваю их на один большой NSDictionary и использую для циклов, чтобы разобрать его и загрузить данные в NSMutableDictionaries, прежде чем я перейду к следующему запросу. Мой вопрос заключается в том, что я повторяю эту последовательность раз много раз снова и снова, и мне интересно, было бы лучше всего просто загрузить данные и после завершения загрузки, затем проанализировать мой JSON в нужные словари , может быть, есть лучший способ сделать это, о котором я просто не думаю? Я проверил общие ассигнования с помощью инструментов, и это похоже на то, что я набираю около 30 МБ во время этого процесса.NSOperation Data Parsing Best Practice

Поблагодарили бы за любые советы по этому вопросу.

Вот небольшой пример кода 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]; 
       } 
      } 

ответ

1

Было бы интересно узнать, какие объекты потребляют этот объем памяти. Вы можете уменьшить объем памяти, разбив пакеты данных с сервера. Другой вопрос: действительно ли вам нужно хранить столько данных в памяти?

Вы можете использовать некоторые другие бэкэнд, такие как CoreData или raw SQLite, чтобы сохранять свои данные на диск по мере его анализа. Преимущество заключается в том, что вы не загружаете все в памяти сразу, что происходит в случае с сериализованными NSDictionaries.

+0

Привет, GorillaPatch, похоже, что большая часть моей памяти была заполнена циклами, которые я запускал, которые могли быть продуманы немного больше, чтобы уменьшить количество итераций. С тех пор я сократил память до менее чем одной трети от того, что было. Как CoreData сравнивается с NSDictionaries? Является ли CoreData структурой таблицы, подобной базе данных? – AgnosticDev