一些背景:
我写了一个 UIScrollView 派生类,它有一个名为 contentView 的 outlet,类似于以下内容:
@interface MyScrollView : UIScrollView {
IBOutlet UIView * contentView;
}
...
@end
在这种情况下,我的出口是 iVar,而不是财产。我在 Interface builder 中使用了我的类并将视图连接到contentView
插座。然而,在运行时,我发现我的 iVar 仍然是 nil 并且没有设置为所需的视图对象。
一些实验表明,如果我重命名插座或将插座设为属性而不是 iVar,一切都会正常工作。进一步的研究表明,使用我的插座作为名为 的 iVar contentView
,加载 nib 实际上会将我想要的视图对象连接到 UIScrollView 中名为 的私有 iVar _contentView
。
我知道 nib 加载使用 KVC 设置值,并且 KVCsetValue:forKey:
方法将使用以下任何一种设置值:
set{Key}:
方法{key}
iVar_{key}
iVar
我怀疑但无法证明set{Key}:
首先尝试找到该方法,如果失败,则进行 iVar 的枚举以找到下一个{key}
或_{key}
iVar。此枚举可能以从超类在子类之前处理 iVar 的顺序发生。
是否有记录上述候选人的顺序?与子类相关的超类成员的尝试顺序是什么?