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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta