2017-03-22 3 views
2

코어 데이터에서 모든 NSEntityDescription 개체를 제거하고 메모리를 릴리스하려고했습니다. reset 기능은 다음과 같은 메모리핵심 데이터 목록에서 NSEntityDescription 개체 제거

에 어떤 변화를하지 않는 것은 내 코드는 메모리뿐만 아니라 발표 할 예정 나의 이해

-(void)generatePersons: (NSManagedObjectContext *)privatecontext{ 
    self.persons = [[NSMutableArray alloc]init]; 

    [privatecontext performBlockAndWait:^{ 
     for(int i = 1; i< self.dataRows.count; i++){ 
      NSArray *HeaderRow = [self.dataRows objectAtIndex:1]; 
      NSArray *dataRow = [self.dataRows objectAtIndex:i]; 

      if (dataRow.count <= HeaderRow.count){ 
       int index = 0; 

       Person *person = (Person *)[NSEntityDescription 
              insertNewObjectForEntityForName:@"Person" 
              inManagedObjectContext:privatecontext]; 



       [self.persons addObject:person]; 


      } 
     } 

     [privatecontext reset]; 

    }]; 
} 

[privatecontext reset]; 이론적으로는 기본 상태로 상황에 맞는 설정이 코드, 하지만 그것은 같은 메모리 카운트에 남아 있지 않습니다.

+0

해당 인스턴스는 모두 해당 어레이에 유지됩니다. –

+0

@TomHarrington 우리가'[self.persons addObject : person];에 대해서도 주석을 달아도 for 루프 범위를 벗어난 후에도 여전히 같은 양의 메모리를 차지하고 블록 범위를 대기 –

답변

0

블록에서 자기에 대한 약한 참조를 사용해보십시오.

__weak __block __typeof(&*self)weakself = self;

그리고 대신이 selfweakself를 사용

은 블록의 인라인 선언하기 전에 참조를 만듭니다. 이로 인해 스레드가 메모리를 해제하지 못할 수 있습니다.

+0

질문을 오해 한 것입니다. –