没有iVar和getter方法的属性?
我今天发现了这个,只是想验证我对发生了什么事的理解。 “prefixName”是一个使用getter方法直接传回值的只读属性,没有iVar将结果存储在PR_ViewController对象上。此外,如果该属性不是只读添加一个setter仍然不会工作,因为没有iVar设置。没有iVar和getter方法的属性?
- 创建:[甲基] prefixName
相比之下 “characterName” 适用于一个属性通常的方式,加入了吸气剂,一个设置器和一个IVAR。
- 创建:[甲基] characterName
- 创建:[甲基] setCharacterName
- 创建:[IVAR] characterName
。
@interface PR_ViewController : UIViewController
@property (nonatomic, readonly) NSString *prefixName;
@property (nonatomic, retain) NSString *characterName;
。
@implementation PR_ViewController
@synthesize characterName;
- (NSString *)prefixName {
return @"FRED";
}
您不需要综合访问器 - 您可以完全自己编写它们,这就是您的示例中所做的。
此外,只读属性不必基于伊娃,但可以基于其他ivars或属性进行计算。如果您使用绑定来显示UI中从其他属性派生的值(如果您喜欢该编码风格的话),这会非常有用。
这里是一个只读属性基于其它两个属性计算的简单示例:
头文件:
@property double width;
@property double height;
@property (readonly) double area;
实现:
@synthesize width, height;
- (double)area
{
return width*height;
}
+ (NSSet *)keyPathsForValuesAffectingArea
{
return [NSSet setWithObjects:@"width", @"height", nil];
}
现在,width
每当任一或height
更改,area
属性也会更改,并且其更改会传播到其侦听器(比ks到keyPathsForValuesAffectingArea
。)
您还可以在此doc中看到fullName
示例。
我知道你可以手动编写getter和setter,但更多的问题是没有iVar支持这个属性。在上面的例子中,prefixName在对象上没有一个iVar,characterName就是这样。 – fuzzygoat 2012-01-09 13:39:44
我想我们彼此了解,但我认为它是伊娃只是存储或计算房产价值的众多方式之一。例如,它也可以是一组数字的总和。 – Monolo 2012-01-09 13:43:19
谢谢,我想我现在可以理解它。在手动添加iVar或使用@synthesis生成iVar的情况下,手动添加访问器(getter&setter)。然而,getter返回没有价值,所以你必须在方法中计算一个值,就像明智地使用setter一样,没有什么可设置的,所以setter有点多余(除非你想要有点复杂和设置别的东西/其他一些iVar – fuzzygoat 2012-01-09 13:49:49
不要重复您的问题。请关闭其中一个。 – Ilanchezhian 2012-01-09 13:04:33
你正确地理解它。 – 2012-01-09 13:04:37
[Property with no iVar and getter method?]可能重复?(http://stackoverflow.com/questions/8788773/property-with-no-ivar-and-getter-method) – rckoenes 2012-01-09 13:34:00