由於iOS最近的運行時間,我們能夠定義將生成實例變量訪問器的屬性。根據我的理解,聲明所使用的實例變量並不是強制性的,因爲它會自動爲我們完成。合成的實例變量生成爲私有而不是受保護的嗎?
例如,如果我寫的:
@interface MyFirstClass
@property (readonly, nonatomic) int size;
@end
,並在.M
@implementation MyFirstClass
@synthesize size;
@end
那麼,「大小」將被添加爲我和一個叫方法「命名實例變量 - ( 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
謝謝你的幫助! Nicolas。
好吧,這意味着我必須在界面中聲明變量以便能夠直接在子類中訪問它,對吧? 自動創建的實例變量實際上是私有的。 – 2012-02-11 23:19:22
對。這是編譯器查找超類實例變量的唯一地方。 – ughoavgfhw 2012-02-11 23:20:42