您可以採取幾種方法。
第一種方法是讓讀者線程將屬性值複製到局部變量中,並使用更新方法操作數組的副本(或創建新數組),然後將屬性設置爲更新/新數組。這將確保讀取器方法繼續使用舊數據操作,直到下一次執行。像這樣的東西 -
-(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性能問題,但這可能不會是一個問題,是我會推薦的方法。