您可以在第二个头文件中放置这些属性的访问器,并在"需要知道"的基础上导入该文件.例如
mySuperClass + undocumentedProperties.h
#import "mySuperClass.h" @interface mySuperClass(undocumentedProperties) @property (nonatomic, strong) UITextField *emailField; @end
mySuperClass.m
#import "mySuperClass+undocumentedProperties.h" @interface mySuperClass() ///stuff that truly will be private to this class only // self.emailField is no longer declared here.. @end @implementation mySuperClass @synthesize emailField; //(not really needed anymore) /// etc, all your code unaltered @end
mySubclass.h
#import "mySuperClass.h" @interface mySubclass:mySuperClass ///some stuff @end
mySubclass.m
#import "mySubclass.h" #import "mySuperClass+undocumentedProperties.h" @implementation //off you go, this class is now 'aware' of this secret inherited property.. @end
很明显,MySuperClass.m必须导入这个.h文件以及它的默认文件(或者实际上不是,默认的是内置于此文件中),但你的子类也可以导入它(直接导入它们的.m文件,所以这些属性对于类来说是私有的.这不是一个合适的类别,因为没有相应的mySuperClass + undocumentedProperties.m文件(如果你尝试过,你无法为这些秘密属性合成支持iVars.享受:)
您可以在第二个头文件中放置这些属性的访问器,并在"需要知道"的基础上导入该文件.例如
mySuperClass + undocumentedProperties.h
#import "mySuperClass.h" @interface mySuperClass(undocumentedProperties) @property (nonatomic, strong) UITextField *emailField; @end
mySuperClass.m
#import "mySuperClass+undocumentedProperties.h" @interface mySuperClass() ///stuff that truly will be private to this class only // self.emailField is no longer declared here.. @end @implementation mySuperClass @synthesize emailField; //(not really needed anymore) /// etc, all your code unaltered @end
mySubclass.h
#import "mySuperClass.h" @interface mySubclass:mySuperClass ///some stuff @end
mySubclass.m
#import "mySubclass.h" #import "mySuperClass+undocumentedProperties.h" @implementation //off you go, this class is now 'aware' of this secret inherited property.. @end
很明显,MySuperClass.m必须导入这个.h文件以及它的默认文件(或者实际上不是,默认的是内置于此文件中),但你的子类也可以导入它(直接导入它们的.m文件,所以这些属性对于类来说是私有的.这不是一个合适的类别,因为没有相应的mySuperClass + undocumentedProperties.m文件(如果你尝试过,你无法为这些秘密属性合成支持iVars.享受:)