从Objective-C中的子类访问ivar

时间:2015-07-06 15:35:50

标签: objective-c subclass superclass ivar

我的课程A.m文件中有此声明:

@implementation A {
    NSObject *trickyObject;
}

B文件中包含此声明的类.h

@interface B : A
@end

是否有可能从类trickyObject中声明的方法访问B

1 个答案:

答案 0 :(得分:1)

如果您的属性或方法是私有的,但您希望对子类进行访问,则可以将其放在category中:

@interface A (AProtected)

@property (nonatomic, readwrite) NSObject *trickyObject;

@end

然后,您可以将此类别放入其自己的.h文件中(例如ASubclass.h)。 A.mB.m这两个#import文件都可以.h,并享有trickyObject属性。

您不能在类别中使用ivars,但您可以为该ivar定义属性,因此可以在使用该类别的任何类中访问它。

此模式的Cocoa示例为UIKit/UIGestureRecognizerSubclass.h。如果您想看到它,请选择"快速打开..."来自Xcode" File"菜单(或按 shift + 命令 + O ,字母"哦",不为零)并搜索{{ 1}}。这是一个公开只有UIGestureRecognizerSubclass子类将使用的方法和属性的类别。