I'm creating a KVC/KVO-compliant mutable array on one of my objects the recommended way:
@interface Factory {
NSMutableArray *widgets;
}
- (NSArray *)widgets;
- (void)insertObject:(id)obj inWidgetsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromWidgetsAtIndex:(NSUInteger)idx;
@end
Clearly this is a tricky thread-safety issue. In the insert
and remove
methods I'm locking around array access to prevent concurrent modification, as recommended.
My question is, what is the proper way to implement the widgets
accessor? Here's my implementation:
- (NSArray *)widgets {
[widgetLock lock];
NSArray *a = [[widgets copy] autorelease];
[widgetLock unlock];
return a;
}
Is it threadsafe?