Cocoa Threadsafe Mutable Collection Access
Ich erstelle auf die empfohlene Weise ein KVC / KVO-kompatibles veränderbares Array für eines meiner Objekte:
@interface Factory {
NSMutableArray *widgets;
}
- (NSArray *)widgets;
- (void)insertObject:(id)obj inWidgetsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromWidgetsAtIndex:(NSUInteger)idx;
@end
Clearly das ist ein kniffliges Thread-Sicherheitsproblem. In deminsert
undremove
Methoden, die ich um den Array-Zugriff sperre, um gleichzeitige Änderungen zu verhindern, wieempfohle.
Meine Frage ist, was ist der richtige Weg, um die @ zu implementierwidgets
accessor? Hier ist meine Implementierung:
- (NSArray *)widgets {
[widgetLock lock];
NSArray *a = [[widgets copy] autorelease];
[widgetLock unlock];
return a;
}
Ist es threadsicher?