- (NSMutableArray*) foos
{
return [self mutableArrayValueForKey:@"foos"];
}
Метод доступа не должен использовать KVC для получения значения свойства, к которому осуществляется доступ; идея состоит в том, что KVC проходит через средства доступа, потому что средства доступа ближе к значению, чем KVC.
Правильная реализация foos
должна возвращать копию, изменяемую или нет, массива. Вот как я это сделаю:
- (NSArray *) foos
{
return [[foos copy] autorelease];
}
Я бы также сделал все средства доступа открытыми. Все, что хочет изменить массив или получить произвольный доступ к элементам по определенным индексам, может сделать это таким образом. Это все еще безопасно и инкапсулировано, потому что они проходят через ваши методы доступа, а не напрямую обращаются к массиву.
Нет никакой причины использовать методы протокола KVC самостоятельно, если вы не знаете, к какому ключу вы будете обращаться во время написания кода. Например, если вы писали загрузчик пера или систему привязок Cocoa, вы бы использовали KVC.