@property 和@synthesize:为啥两者都有?
Posted
技术标签:
【中文标题】@property 和@synthesize:为啥两者都有?【英文标题】:@property and @synthesize: why both?@property 和@synthesize:为什么两者都有? 【发布时间】:2009-11-19 04:34:58 【问题描述】:我已经在 X-code 的学习曲线上攀爬了大约两个月了。我了解@property/@synthesize 指令的用途,但总是在.h 文件中声明属性,然后在.m 文件中合成它们似乎有点多余。
为什么编译器需要这两个指令?如果它们总是一起使用,它们中的一个在技术上不是多余的吗?
提前感谢您对此主题的任何见解。
约翰·多纳
【问题讨论】:
语言是“Objective-C”,IDE是“Xcode”。 【参考方案1】:@property (...) foo
关键字在您的类定义中使用。
如果您提供适当的getters/setters
,则无需在实现文件中使用@synthesize
关键字。
例子:
@property int SomeInt;
---
-(int)SomeInt
return _someInt;
-(void)setSomeInt:(int)newValue
_someInt = newValue;
或者您可以使用@synthesize foo
通知编译器为您生成getters/setters
或@dynamic
通知编译器这些方法将在运行时可用 - 都在实现文件中。
Objective-C 中的属性实际上还有更多的魔力,read up on them at Apple Reference Library。
【讨论】:
不过,@dynamic 或 @synthesize 都不是必需的。只要 getter/setter 在 @implementation 中 Jason Harwig:“如果您提供适当的 getter/setter,则无需在实现文件中使用 @synthesize 关键字。示例:” ... :)【参考方案2】:这样您就可以拆分实现和声明。对我来说似乎很整洁。
【讨论】:
【参考方案3】:好吧,你不能在类别实现中使用@synthesize
,所以这可能是一个原因。
【讨论】:
以上是关于@property 和@synthesize:为啥两者都有?的主要内容,如果未能解决你的问题,请参考以下文章
Objective-c 中的 @property 和 @synthesize
OC基础--关键字@property 和 @synthesize