Acesso à coleção mutável Threadsafe de cacau

Estou criando um array mutável compatível com KVC / KVO em um dos meus objetos da maneira recomendada:

@interface Factory {
    NSMutableArray *widgets;
}
- (NSArray *)widgets;
- (void)insertObject:(id)obj inWidgetsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromWidgetsAtIndex:(NSUInteger)idx;
@end

Claramente, esse é um problema complicado de segurança de threads. Noinsert eremove métodos, estou bloqueando o acesso ao array para impedir modificações simultâneas, comorecomendado.

Minha pergunta é: qual é a maneira correta de implementar owidgets assessor? Aqui está minha implementação:

- (NSArray *)widgets {
    [widgetLock lock];
    NSArray *a = [[widgets copy] autorelease];
    [widgetLock unlock];
    return a;
}

É thread-safe?