我從Big Nerd Ranch iOS編程書中獲取了這段代碼。在代碼中,它們分配兩個實例變量,即coordinate
和title
。爲什麼直接分配coordinate
,並且通過調用setter來設置title
?爲什麼二傳手被稱爲一個屬性而不是另一個?
頭文件
@interface BNRMapPoint : NSObject<MKAnnotation>
-(id)initWithCoordinate:(CLLocationCoordinate2D)c title:(NSString *)t;
@property(nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property(nonatomic, copy) NSString *title;
@end
實現文件
-(id)initWithCoordinate:(CLLocationCoordinate2D)c title:(NSString *)t
{
self = [super init];
if(self){
coordinate = c;
[self setTitle:t];
}
return self;
}
它可以是隻讀,或者它可以被重新聲明爲在延伸(這似乎不是)讀寫。但是,是的......死了。這只是不一致和糟糕的編碼風格。刪除了我的答案;你的更全面。 – bbum
他可以在私人界面中進行讀寫,並在公共界面中只讀。只有當我真正將事情完全讀取時,如果沒有直接備份屬性的變量,而是發出其他隱藏的內部狀態的方式,或者返回值是多個狀態之和值等等。這裏有一個實際的變量,他設置了......所以爲什麼不讓它自己讀寫並通過setter?更一致的是,因爲他似乎想要做的就是防止人們通過初始化工具來搞亂_coordinate_。 – Metabble