2014-06-25 67 views
2

我有一個NSMutableArray,我添加了一組自定義對象。我也使用位置服務,並且每當locationManager:didUpdateLocations:時,我檢查該數組以使用適當的對象(數組的其中一個對象)執行某些操作。另一方面,我需要每隔幾分鐘更新一次這樣的數組,所以我猜這可能會導致衝突,如果數組在讀取時被更新。在iOS中使用其數據時處理陣列更新

什麼應該是在iOS中處理這種情況的最佳方式?

謝謝!

回答

1

您可以採取幾種方法。

第一種方法是讓讀者線程將屬性值複製到局部變量中,並使用更新方法操作數組的副本(或創建新數組),然後將屬性設置爲更新/新數組。這將確保讀取器方法繼續使用舊數據操作,直到下一次執行。像這樣的東西 -

-(void)readerMethod { 
    NSMutableArray *myData=self.myArrayProperty; 
    // You can now operate safely on myData 
} 

-(void)updateLocations { 
    NSMutableArray *myData=[self.myArrayProperty copy]; 
    // manipulate myData 
    self.myArrayProperty=myData; 
} 

第二種方法是使用@synchronized

-(void)readerMethod { 
    @synchronized(self.myArrayProperty) { 
    // Array operations 
    } 
} 

-(void)updateLocations { 
    @synchronized(self.myArrayProperty) { 
    // manipulate myData 
    } 
} 

第一種方法可以招致的開銷更大的內存和時間複製的陣列(這是顯著如果陣列是大) 。第二個可以阻止你的主線程,所以你可以有UI性能問題,但這可能不會是一個問題,是我會推薦的方法。