2017-03-22 119 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

嘗試在您的塊中使用對自身的弱引用。

創建塊的inline聲明前參考:

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

然後用weakself代替self那裏。這可能會阻止線程釋放其內存。

+0

之後仍然佔用相同的內存量,您誤解了這個問題。 –

相關問題