setValue:forKey的顺序是什么:搜索符合KVC的方法或ivar?

时间:2012-08-03 22:46:41

标签: objective-c ios key-value-coding

一些背景知识:

我编写了一个带有名为contentView的插件的UIScrollView派生类,类似于以下内容:

@interface MyScrollView : UIScrollView {
    IBOutlet UIView * contentView;
}

...

@end

我的出口,在这种情况下是iVar,而不是财产。我在“界面”构建器中使用了我的类,并将视图连接到contentView插座。但是,在运行时,我发现我的iVar仍然是零并且没有设置为所需的视图对象。

一些实验表明,如果我重新命名插座或使我的插座成为财产而不是iVar,那么一切都会好起来的。进一步的研究表明,我的插座作为名为contentView的iVar,加载nib实际上将我想要的视图对象连接到名为_contentView的UIScrollView中的私有iVar。

我知道nib加载使用KVC设置值,而KVC setValue:forKey:方法将使用以下任何一种设置值:

  • set{Key}:方法
  • {key} iVar
  • _{key} iVar

我怀疑,但无法证明,首先会尝试找到set{Key}:方法,如果失败,则会进行iVars枚举以查找{key}_{key} iVar接下来。此枚举可能发生在从子类之前的超类处理iVars的顺序中。

是否有记录在案的上述候选人的命令?超类的成员以什么顺序尝试与子类相关?

1 个答案:

答案 0 :(得分:1)

Key-Value Coding Programming Guide中记录了特定的搜索算法。