最近在iOS中的运行时,我们可以定义属性来生成实例变量的访问器。据我所知,不必声明使用的实例变量,因为它会自动为我们完成。
例如,如果我写:
@interface MyFirstClass
@property (readonly, nonatomic) int size;
@end
在.m文件中。
@implementation MyFirstClass
@synthesize size;
@end
那么一个名为“size”的实例变量将被添加给我,并且将实现一个名为“-(int)size”的方法。
问题是,当我创建第二个类MySecondClass作为MyFirstClass的子类时,似乎无法在这个子类中访问实例变量size:
@interface MySecondClass : MyFirstClass
@end
@implementation MySecondClass
- (id)init {
if (self = [super init]) {
size = 10; // this yields and error
}
return self;
}
@end
自动生成的实例变量是私有的吗?是否有可能将它们设置为受保护的,以便我可以在子类中访问它们? 我知道有可能自己声明实例变量,但我只是想知道... 像这样的超类可以工作:(是因为明确声明为protected吗?)
@interface MyFirstClass {
int size; // defined expressly and used as @protected
}
@property (readonly, nonatomic) int size;
@end
感谢您的帮助! 尼古拉斯。