2011-09-05 42 views
1

你能告诉我这些自定义访问器的含义是:为什么你会接着加入该信息给setter自定义访问器和属性中的“=”?

@property (assign,getter=isSelected) BOOL selected; 

以及有关二传手,

@property (copy,setter=setDefaultTitle:) NSString* title; 

是这样的与编写@synthesize title = defaultTitle相同?

感谢

+0

不,因为你正在改变** setter **方法。 –

回答

2
@property (assign,getter=isSelected) BOOL selected; 
在你的头文件

,指定要其他类能够使用myObject.isSelected访问该属性。您正在为您的课程在公共界面中定义此名称。


@synthesize title = defaultTitle; 
在实现文件

,指定您已经定义了一个名为title其他类使用性质,但内部对你的类,你想实际使用的名称defaultTitle。这通常是在您声明自己的私人实例变量defaultTitle时完成的,您不希望人们直接修改它。

+0

在你的例子中,谢谢,defaultTitle不应该被修改,但我们可以做“myClass.title = smthg”这个工作吗?让变量defaultTitle为私人,让属性标题公开是什么意思? – Paul

+0

重点是强制使用getter和setter方法,以确保代码在值被更改时运行。这样,其他类可以使用该属性,但不能简单地对该值进行更改,而无需通过getter或setter。 –

+0

好的谢谢! – Paul

1

@property (assign,getter=isSelected) BOOL selected;

必须指定吸气符合命名规则。见苹果手册引文:

通常应指定访问是键值 编码标准(见键 - 值编码编程指南)-a共同 之所以采用吸气装饰是坚持以方法名 布尔值的isPropertyName约定。

@property (copy,setter=setDefaultTitle:) NSString* title; 这将是相同的,如果您还指定吸气。您必须使用@synthesize title = defaultTitle;为您的getter/setter方法生成正确的方法名称。

+1

欢迎来到Stack Overflow。请阅读[常见问题]。特别是,[不要使用签名](http://stackoverflow.com/faq#signatures)(尤其是包含链接的链接,可能被视为垃圾邮件)。如果您希望自己的姓名出现在帖子的底部,请在您的个人资料中更改您的用户名。 – Gilles

+0

@ user929170:谢谢,所以它是完全一样的东西吧?唯一的区别是,如果你打电话给“isSmthg”或只是“smthg”的财产? – Paul

+0

是的。另请参阅:[BOOL Obj-C的命名约定](http://stackoverflow.com/questions/806900/naming-conventions-for-bool-obj-c-2-properties) –