一些背景知识:
我编写了一个带有名为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的顺序中。
是否有记录在案的上述候选人的命令?超类的成员以什么顺序尝试与子类相关?