2013-02-15 2 views
0

NSOperation을 사용하여 데이터를 다운로드하는 모범 사례에 대한 질문이 있습니다. 현재 NSOperationQueue를 사용하여 원격 서버에서 JSON 데이터에 대한 여러 요청을합니다. 데이터가 들어올 때 하나의 큰 NSDictionary로 나누어서 루프를 사용하여 구문 분석하고 NSMutableDictionaries에 데이터를로드 한 후 다음 요청을 진행합니다. 내 질문은이 동일한 순서를 여러 번 반복해서 수행하고 데이터를 다운로드하고 다운로드가 완료된 후 더 나은 아이디어가 필요한지 궁금해서 JSON을 필요한 사전으로 구문 분석합니다. , 어쩌면 거기에 내가 생각할 수없는 더 좋은 방법이 있을까요? 악기를 사용하여 총 할당을 확인한 결과,이 과정에서 약 30MB의 용량이 채워지는 것처럼 보입니다.NSOperation 데이터 파싱 우수 사례

이 문제에 대한 조언을 주시면 감사하겠습니다. 여기

객체가 메모리의 양을 소비하는 알 흥미로운 일이 될 것이다 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 나 원시 SQLite와 같은 다른 백엔드를 사용하여 데이터를 구문 분석 할 때 디스크에 저장할 수 있습니다. 장점은 직렬화 된 NSDictionaries의 경우와 같이 모든 것을 한 번에 메모리에로드하지 않아도된다는 것입니다.

+0

안녕하세요 GorillaPatch, 내 기억이 많이 반복되는 횟수를 줄이기 위해 조금 더 생각할 수있는 실행중인 루프에 의해 채워지고있는 것 같습니다. 나는 그 이후로 그 기억을 3 분의 1도 안되게 줄였습니다. CoreData는 NSDictionaries와 어떻게 비교됩니까? CoreData는 데이터베이스와 같은 테이블 구조입니까? – AgnosticDev