Я думаю, вы ошиблись. Совместимость с KVC не означает, что метод доступа будет вызывать -setValue:forKey:
Совместимость с KVC означает, что вызов -setValue:forKey:
вызовет метод доступа.
Расширение немного: KVC-совместимый означает только то, что следует соглашениям по присвоению имен .Почему это важно?Я могу вызывать методы доступа как угодно.Для свойства 'Foo':
- (void)weakSetFoo:(id)f;
- (id)autoreleasedFoo;
Это хорошо.Но такой механизм, как Bindings, попытается установить Foo путем вызова
[ob setValue:newVal forKey:@"foo"];
-setValue:forKey:
, который попытается сделать правильную вещь и использовать метод доступа (если мы написали метод установки, это потому, что мы хотим, чтобы ониспользоваться, верно?).Но если мы не назовем наш метод установки стандартным -setFoo:
, мы не сможем найти его.
Таким образом, -weakSetFoo:
является методом установки, но свойство Foo не соответствует KVC.Если я изменю имя установщика на -setFoo:
, свойство Foo теперь совместимо с KVC.
Методы синтезированного метода доступа по умолчанию будут иметь правильные имена.