//Super class .h file
@interface MySuperClass : NSObject
@end
//Super class .m file
@interface MySuperClass ()
@property (nonatomic, strong) UITextField *emailField;
@end
@implementation MySuperClass
-(void)accessMyEmailField {
NSLog(@"My super email: %@", self.emailField.text);
}
@end
// ********** my subclass *******
//Subclass .h file
@interface MySubClass : MySuperClass
@end
//SubClass .m file
@interface MySubClass ()
@end
@implementation MySubClass
-(void)myEmail {
NSLog(@"My subclass email: %@", self.emailField.text);
}
-(void)setMyEmailFromSubclass{
self.emailField.Text = @"email@gmail.com"
}
@end
-(void)myEmail method
。-(void)setMyEmailFromSubclass
中设置电子邮件; ,并在超级accessMyEmailField
答案 0 :(得分:8)
您可以在第二个头文件中放置这些属性的访问者,并在“需要知道”的基础上导入该文件。 例如
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。享受:) < / p>
答案 1 :(得分:1)
从超类中复制所需方法的私有接口部分 - 或者换句话说,在Subclass.m文件中复制:
@interface MySuperClass ()
@property (nonatomic, strong) UITextField *emailField;
@end
(将其置于现有@interface MySubClass ()
代码之上)
现在你的子类知道该方法存在于超类中并且可以使用它,但你不会将它暴露给任何其他人。
答案 2 :(得分:1)
私有财产的重点正是如此,你不应该想要访问它们。因为它们是私有的,所以可以更改或删除它们,从而打破依赖它们的子类。
据说他们并非真正私密,只是没有“发表”。可以调用,因为Objective-C是一种运行时动态语言。