暴露受保护的Objective-C的实例变量的子类
我继承荚的类,并在这个类有,我想揭露和我的类中使用一个专用的实例变量:通常暴露受保护的Objective-C的实例变量的子类
@interface MySuperClass() {
UIScrollView *_scrollView;
}
与曝光一个私人成员或方法,我会使用前面提到的here之类的类别,但我在使用私有实例变量时遇到问题。我读here Associative References可能工作,但我无法使其工作。
尝试在子类中实现:
- (UIScrollView *)scrollView {
return [self valueForKey:@"_scrollView"]
}
谢谢!有效 – Aviram 2015-04-13 13:25:33
不幸的是,在Objective-C中没有办法声明私有实例变量。
无论您希望您的子类能够看到什么,您都必须在.h
-文件中声明。您正在讨论的关联引用以完全相同的方式工作,但他们解决了另一个问题,即在类别中声明实例变量。
这是由于语言的设计,我想这是有道理在.m
文件是真的实施文件,并没有其他类应该真正关心的另一个实施方式,即使有继承关系像子类。
带有该pod类的私有实例变量的选项将放在属性中,或者实际执行类别,您可以在其中添加方法来访问它。
我试图实现一个由私有实例组成的类别,但它不起作用。 – Aviram 2015-02-09 09:33:40
你实现[这](http://oleb.net/blog/2011/05/faking-ivars-in-objc-categories-with-associative -references /)? – Mundi 2015-02-08 14:57:49
@Mundi我试过了,但它对我没有用,也许我在实现它时犯了一个错误。 – Aviram 2015-02-08 15:01:04
我不认为你可以。 anInstanceOfMySuperClass._scrollView是不可能的,因为点符号用于访问属性。如果你真的想这样做,也许你可以编写一个setter和getter方法来模拟这种行为。 – user523234 2015-02-08 15:30:02