虽然问题很基础,但我发现了解它对于进行IOS编程非常重要。有时我们过去只声明实例变量,我们不为它设置任何关联的属性。有些地方我们只是声明属性并使用合成来获取或设置值。有时我觉得有必要在代码中声明两者,当编译给我警告时! Objective C 中属性操作背后的基本原理是什么?我知道为任何实例变量创建 getter 和 setter 的基本要求,但是什么时候? 我已经多次看到我们根本不使用属性,之后我们也很容易设置和获取变量的值。此外,我还不清楚不同类型的属性,如原子、非原子、强、保留。 XCODE 升级到 4.2 动摇了我对内存管理的概念。谁能拨开我心中的乌云?
最佳答案
属性始终是直接访问 ivar 的首选方式,主要有以下原因:
- 您可以覆盖子类中的 getter 或 setter
- 您可以定义“赋值行为”(即
copy
、assign
、retain/strong
、weak
) - 您可以同步ivar访问
关键词:
copy
:对象在设置时复制到ivarassign
:对象的指针在设置时分配给ivarretain/strong
:对象保留在集合上weak
:在 ARC 中,这类似于 assign,但会在实例被释放时自动设置为nil
,也用于垃圾收集环境。nonatomic
:访问器不是@synchronized
(线程安全),因此速度更快atomic
:访问器是@synchronized
(线程安全),因此速度较慢
通常,您应该始终合成一个 ivar。如果您出于性能原因需要更快的访问速度,您也可以随时直接访问合成的 ivar。
关于objective-c - Objective-C : @property declaration and instance variable declaration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9357774/