在iOS中使用阵列数据时处理阵列更新
我有一个在iOS中使用阵列数据时处理阵列更新,ios,arrays,locking,nsmutablearray,updates,Ios,Arrays,Locking,Nsmutablearray,Updates,我有一个NSMutableArray,其中添加了一组自定义对象。我也在使用位置服务,每当locationManager:didUpdateLocations:时,我都会检查该数组,以使用适当的对象(数组的对象之一)执行一些操作。另一方面,我需要每隔几分钟更新一次这样的数组,所以我想如果在读取数组时更新数组,可能会导致冲突 在iOS中处理这种情况的最佳方法是什么 谢谢 您可以采取几种方法 第一种方法是让读取器线程将属性值复制到局部变量中,让update方法操作数组的副本(或创建新数组),然后将属性
NSMutableArray
,其中添加了一组自定义对象。我也在使用位置服务,每当locationManager:didUpdateLocations:
时,我都会检查该数组,以使用适当的对象(数组的对象之一)执行一些操作。另一方面,我需要每隔几分钟更新一次这样的数组,所以我想如果在读取数组时更新数组,可能会导致冲突
在iOS中处理这种情况的最佳方法是什么
谢谢 您可以采取几种方法 第一种方法是让读取器线程将属性值复制到局部变量中,让update方法操作数组的副本(或创建新数组),然后将属性设置为updated/new数组。这将确保读取器方法在下次执行之前继续使用旧数据操作。类似这样的事情-
-(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性能问题,但这可能不会成为问题,这是我推荐的方法