暴露受保护的Objective-C的实例变量的子类

问题描述:

我继承荚的类,并在这个类有,我想揭露和我的类中使用一个专用的实例变量:通常暴露受保护的Objective-C的实例变量的子类

@interface MySuperClass() { 
    UIScrollView *_scrollView; 
} 

与曝光一个私人成员或方法,我会使用前面提到的here之类的类别,但我在使用私有实例变量时遇到问题。我读here Associative References可能工作,但我无法使其工作。

+0

你实现[这](http://oleb.net/blog/2011/05/faking-ivars-in-objc-categories-with-associative -references /)? – Mundi 2015-02-08 14:57:49

+0

@Mundi我试过了,但它对我没有用,也许我在实现它时犯了一个错误。 – Aviram 2015-02-08 15:01:04

+0

我不认为你可以。 anInstanceOfMySuperClass._scrollView是不可能的,因为点符号用于访问属性。如果你真的想这样做,也许你可以编写一个setter和getter方法来模拟这种行为。 – user523234 2015-02-08 15:30:02

尝试在子类中实现:

- (UIScrollView *)scrollView { 
    return [self valueForKey:@"_scrollView"] 
} 
+0

谢谢!有效 – Aviram 2015-04-13 13:25:33

不幸的是,在Objective-C中没有办法声明私有实例变量。

无论您希望您的子类能够看到什么,您都必须在.h-文件中声明。您正在讨论的关联引用以完全相同的方式工作,但他们解决了另一个问题,即在类别中声明实例变量。

这是由于语言的设计,我想这是有道理在.m文件是真的实施文件,并没有其他类应该真正关心的另一个实施方式,即使有继承关系像子类。

带有该pod类的私有实例变量的选项将放在属性中,或者实际执行类别,您可以在其中添加方法来访问它。

+0

我试图实现一个由私有实例组成的类别,但它不起作用。 – Aviram 2015-02-09 09:33:40