objective-c - Objective-C : @property declaration and instance variable declaration

标签 objective-c ios5 automatic-ref-counting

虽然问题很基础,但我发现了解它对于进行IOS编程非常重要。有时我们过去只声明实例变量,我们不为它设置任何关联的属性。有些地方我们只是声明属性并使用合成来获取或设置值。有时我觉得有必要在代码中声明两者,当编译给我警告时! Objective C 中属性操作背后的基本原理是什么?我知道为任何实例变量创建 getter 和 setter 的基本要求,但是什么时候? 我已经多次看到我们根本不使用属性,之后我们也很容易设置和获取变量的值。此外,我还不清楚不同类型的属性,如原子、非原子、强、保留。 XCODE 升级到 4.2 动摇了我对内存管理的概念。谁能拨开我心中的乌云?

最佳答案

属性始终是直接访问 ivar 的首选方式,主要有以下原因:

  • 您可以覆盖子类中的 getter 或 setter
  • 您可以定义“赋值行为”(即copyassignretain/strongweak )
  • 您可以同步ivar访问

关键词:

  • copy:对象在设置时复制到ivar
  • assign:对象的指针在设置时分配给ivar
  • retain/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/

相关文章:

objective-c - iOS:卸载和弹出 View Controller

objective-c - std::pair 类似于 cocoa 或基础工具包?

ios - 为什么大多数指令在向项目添加库时显示 "uncheck copy items into the destination folder"?

iphone - iOS 5:UITabBarItem setFinishedSelectedImage:withFinishedUnselectedImage:不起作用/被忽略

ios - iOS 6.0 ARC下需要释放GCD队列吗?

ios - UITableView单元格大小

ios - 让 Google Maker 像一个切换按钮

core-data - 如何处理 UIManagedDocument?

ios - 如果不在 Xcode 中打开它,如何判断 iOS 项目是否正在使用 ARC?

ios - 使用 AFNetworking 下载图像 - 使用 ARC 弹出 ViewController 后内存不会释放