首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性没有iVar和getter方法?

属性没有iVar和getter方法?
EN

Stack Overflow用户
提问于 2012-01-09 12:54:41
回答 1查看 4.7K关注 0票数 1

我今天注意到了这一点,只是想验证一下我对正在发生的事情的理解。"prefixName“是一个只读属性,它使用getter方法直接传回一个值,没有iVar将结果存储在PR_ViewController对象上。另外,如果属性不是只读的,添加一个setter仍然不能工作,因为没有设置iVar。

  • 创建:冰毒prefixName

相比之下,"characterName“通常用于属性,添加getter、setter和iVar。

  • 创建:冰毒characterName
  • 创建:冰毒setCharacterName
  • 创建: iVar characterName

代码语言:javascript
复制
@interface PR_ViewController : UIViewController
@property (nonatomic, readonly) NSString *prefixName;
@property (nonatomic, retain) NSString *characterName;

代码语言:javascript
复制
@implementation PR_ViewController
@synthesize characterName;

- (NSString *)prefixName {
    return @"FRED";
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-09 13:03:08

您不需要合成访问器--您完全可以自己编写它们,这就是在您的示例中所做的。

此外,只读属性不必基于ivar,而是可以根据其他ivar或属性进行计算。如果您使用绑定在UI中显示来自其他属性的值,这将非常有用,只要您喜欢这种编码样式。

下面是基于其他两个属性计算的只读属性的一个简单示例:

头文件:

代码语言:javascript
复制
@property double width;
@property double height;

@property (readonly) double area;

执行情况:

代码语言:javascript
复制
@synthesize width, height;

- (double)area
{
    return width*height;
}


+ (NSSet *)keyPathsForValuesAffectingArea
{
    return [NSSet setWithObjects:@"width", @"height", nil];
}

现在,每当widthheight之一发生变化时,area属性也会发生变化,其更改将传播到侦听器(多亏了keyPathsForValuesAffectingArea)。

您还可以在这个fullName中看到文档示例。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8788730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档