@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 在 @implementationJason Harwig:“如果您提供适当的 getter/setter,则无需在实现文件中使用 @synthesize 关键字。示例:” ... :)【参考方案2】:

这样您就可以拆分实现和声明。对我来说似乎很整洁。

【讨论】:

【参考方案3】:

好吧,你不能在类别实现中使用@synthesize,所以这可能是一个原因。

【讨论】:

以上是关于@property 和@synthesize:为啥两者都有?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-c 中的 @property 和 @synthesize

OC基础--关键字@property 和 @synthesize

19-oc@property和@synthesize

OC开发系列-@property和@synthesize

有没有更快的方法来执行 @property 、 @synthesize 和释放类变量?

oc-25- @property @synthesize