我對我的一個對象的推薦方式創建一個兼容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