我对我的一个对象的推荐方式创建一个兼容KVO-KVC /可变数组:可可线程安全的可变集合访问
@interface Factory {
NSMutableArray *widgets;
}
- (NSArray *)widgets;
- (void)insertObject:(id)obj inWidgetsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromWidgetsAtIndex:(NSUInteger)idx;
@end
显然,这是一个棘手的线程安全问题。在insert
和remove
方法我锁定阵列访问以防止并发修改,如recommended。
我的问题是,实现widgets
访问器的正确方法是什么?这是我的实现:
- (NSArray *)widgets {
[widgetLock lock];
NSArray *a = [[widgets copy] autorelease];
[widgetLock unlock];
return a;
}
它是线程安全吗?
@synchronized实际上已被弃用,但比NSLock慢。 – Frizlab 2013-11-01 21:55:54