2
@interface rectangle: NSObject
@property int width, height;
{
-(int) area;
-(int) perimeter;
-(void) setWidth: (int) w andHeight: (int) h;
}
@end
@implementation rectangle
@synthesize width, height;
...
...
@end
我做了長方形的正方形子爲什麼我不能直接使用實例變量從父類
@interface square: rectangle
-(void) setSide: (int) s;
-(int) side;
@end
@implementation square
-(void) setSide: (int) s
{
[self setWidth: s andHeight: s];
}
-(int) side
{
return self.width;
}
@end
我的主要問題是:爲什麼我不能只是這樣做
return width;
當我想獲得我的方形物體的一面。 我想
@property int width, height;
距離
@interface rectangle: NSObject
{
int width;
int height;
}
//getter/setter methods
...
@end
,並在書中簡化,如果一個實例變量在@interface聲明,它是由它的子類繼承。但是,顯然,
return width;
似乎並不奏效。這是爲什麼發生?
屬性當然不是實例變量的「簡化形式」。 – sosborn 2013-03-16 08:37:09
是在屬性中聲明的變量是一個私有變量? – 2013-03-16 08:40:56
一個屬性不止於此。屬性使setter和getter可訪問,並定義訪問器的一些關鍵行爲(例如,複製與分配結果稍有不同的setter)。並且該屬性可以從外部訪問。當你使用@synthesize時,相應的iVar應該是「寬度」,就像你使用它的方式一樣。如果你只聲明屬性,你應該讓它自動合成它,那麼相應的受保護的ivar的名字就是'_width。 – 2013-03-16 08:45:00