我从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