我的课程A
在.m
文件中有此声明:
@implementation A {
NSObject *trickyObject;
}
在B
文件中包含此声明的类.h
:
@interface B : A
@end
是否有可能从类trickyObject
中声明的方法访问B
?
答案 0 :(得分:1)
如果您的属性或方法是私有的,但您希望对子类进行访问,则可以将其放在category中:
@interface A (AProtected)
@property (nonatomic, readwrite) NSObject *trickyObject;
@end
然后,您可以将此类别放入其自己的.h
文件中(例如ASubclass.h
)。 A.m
和B.m
这两个#import
文件都可以.h
,并享有trickyObject
属性。
您不能在类别中使用ivars,但您可以为该ivar定义属性,因此可以在使用该类别的任何类中访问它。
此模式的Cocoa示例为UIKit/UIGestureRecognizerSubclass.h
。如果您想看到它,请选择"快速打开..."来自Xcode" File"菜单(或按 shift + 命令 + O ,字母"哦",不为零)并搜索{{ 1}}。这是一个公开只有UIGestureRecognizerSubclass
子类将使用的方法和属性的类别。