Acceso a la colección mutable Cocoa Threadsafe
Estoy creando una matriz mutable compatible con KVC / KVO en uno de mis objetos de la manera recomendada:
@interface Factory {
NSMutableArray *widgets;
}
- (NSArray *)widgets;
- (void)insertObject:(id)obj inWidgetsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromWidgetsAtIndex:(NSUInteger)idx;
@end
Claramente, este es un problema complicado de seguridad de hilos. En elinsert
yremove
métodos que estoy bloqueando alrededor del acceso a la matriz para evitar modificaciones concurrentes, comorecomendado.
Mi pregunta es, ¿cuál es la forma correcta de implementar elwidgets
accesor? Aquí está mi implementación:
- (NSArray *)widgets {
[widgetLock lock];
NSArray *a = [[widgets copy] autorelease];
[widgetLock unlock];
return a;
}
¿Es seguro?