Properties @属性和@synthetic:为什么两者都有?

Properties @属性和@synthetic:为什么两者都有?,properties,compiler-directives,Properties,Compiler Directives,到现在为止,我已经在爬X代码的学习曲线大约两个月了。我理解@property/@synthesis指令的用途,但总是在.h文件中声明属性,然后在.m文件中合成它们似乎有点多余 为什么编译器需要这两个指令?如果它们总是一起使用,其中一个在技术上不是多余的吗 提前感谢您对本主题的任何见解 John Doner好吧,您不能在类别实现中使用@synthesis,所以这可能是一个原因。这样您可以拆分实现和声明。对我来说似乎很整洁。类定义中使用了@property(…)foo关键字。 如果提供了适当的get

到现在为止,我已经在爬X代码的学习曲线大约两个月了。我理解@property/@synthesis指令的用途,但总是在.h文件中声明属性,然后在.m文件中合成它们似乎有点多余

为什么编译器需要这两个指令?如果它们总是一起使用,其中一个在技术上不是多余的吗

提前感谢您对本主题的任何见解


John Doner

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

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

类定义中使用了
@property(…)foo
关键字。 如果提供了适当的
getter/setter
,则不需要在实现文件中使用
@synthesis
关键字

例如:

@property int SomeInt;

---

-(int)SomeInt {
  return _someInt;
}

-(void)setSomeInt:(int)newValue {
  _someInt = newValue;
}
或者,您可以使用
@synthetic foo
通知编译器为您生成
getter/setter
,或者使用
@dynamic
通知编译器这些方法将在运行时可用-都在实现文件中


实际上,Objective-C中的属性背后有更多的魔力。

语言是“Objective-C”,IDE是“Xcode”。不过,不需要@dynamic或@Synthesis。只要getter/setter在@implementationJason Harwig中:“如果您提供了适当的getter/setter,则不需要在实现文件中使用@synthesis关键字。示例:”…:)