【发布时间】:2012-03-03 22:10:07
【问题描述】:
由于最近在 iOS 中运行时,我们能够定义将为实例变量生成访问器的属性。据我了解,声明使用的实例变量不是强制性的,因为它会自动为我们完成。
例如,如果我写:
@interface MyFirstClass
@property (readonly, nonatomic) int size;
@end
在.m中
@implementation MyFirstClass
@synthesize size;
@end
然后会为我添加一个名为“size”的实例变量,并实现一个名为“-(int)size”的方法。
问题是当我创建第二个类 MySecondClass 时,它是 MyFirstClass 的子类,我似乎无法访问该子类中的实例变量大小:
@interface MySecondClass : MyFirstClass
@end
@implementation MySecondClass
- (id)init {
if (self = [super init]) {
size = 10; // this yields and error
}
return self;
}
@end
自动创建的实例变量是私有的吗?是否有可能将它们设置为受保护,以便我可以在子类中访问它们? 我知道可以自己声明实例变量,但我只是想知道......
这样的超类可以工作:(是因为它被明确声明为受保护的吗?)
@interface MyFirstClass {
int size; // defined expressly and used as @protected
}
@property (readonly, nonatomic) int size;
@end
感谢您的帮助!! 尼古拉斯。
【问题讨论】:
标签: objective-c properties private instance-variables