Доступ к изменяемой коллекции Cocoa Threadsafe
Я создаю изменяемый массив, совместимый с KVC / KVO, на одном из моих объектов:
@interface Factory {
NSMutableArray *widgets;
}
- (NSArray *)widgets;
- (void)insertObject:(id)obj inWidgetsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromWidgetsAtIndex:(NSUInteger)idx;
@end
Очевидно, что это сложная проблема с безопасностью потоков. вinsert
а такжеremove
методы я блокирую доступ к массиву, чтобы предотвратить одновременную модификацию, какрекомендуемые.
Мой вопрос заключается в том, как правильно реализоватьwidgets
аксесс? Вот моя реализация:
- (NSArray *)widgets {
[widgetLock lock];
NSArray *a = [[widgets copy] autorelease];
[widgetLock unlock];
return a;
}
Это потокобезопасно?