在类实现和xib之间的Objective C中的继承可见性的不同行为

时间:2013-06-07 09:23:18

标签: objective-c

我有一个带有xib关联的ClassA:

@interface ClassA : UIViewController
@end


#import "ClassA.h"
@interface ClassA()
@property (nonatomic, weak) IBOutlet UIButton *myButton;
@end

@implementation ClassA
....
@end

知道我有一个继承自ClassA的ClassB女巫。 (UIViewController女巫xib)

@interface ClassB : ClassA
@end

@implementation ClassB

// Here i can't not access the private property myButton.
@end

我的问题是:

我知道所有私有类字段(Methodes,properties,..)都不能在继承的类中访问。我也知道如果我想访问我的属性,我只是在ClassA.h中声明它们,但我认为IBOUtlet和IBAction应该是私有的。为什么Objective C不能拥有类似Java关键字(私有,受保护,公共)的东西。 ?

我的另一个问题是,在ClassB.xib中,我已经将文件的所有者分配给了ClassB,在这里我可以看到myButton Outlet(在ClassA中被宣告为私有)并且我可以将它分配给ClassB.xib中的其他Button但我无法以编程方式执行此操作。

为什么xib(文件所有者)和Class的代码实现(继承可见性不同)之间存在差异?感谢

2 个答案:

答案 0 :(得分:1)

我认为您可以在ClassB.xib中看到myButton属性,因为Xcode只查找IBOutlets,然后在运行时,当加载nib时,它只使用setValue:forKey:通过KVC设置该属性。您可以使用KVC从ClassB访问myButton,但您不希望这样,否则您将该属性声明为public(在头文件中)。

答案 1 :(得分:0)

这不是Java。 如果它被声明为IBOutlet或IBAction,它为Interface Builder提供了可见性。