虽然这个问题很基础,但我发现继续进行IOS编程非常重要。有时我们过去只声明实例变量,我们不会为它设置任何关联的属性。我们只声明属性并使用synthesize来获取或设置值。有时我觉得有必要在代码中声明两者,当编译给我警告时!在Objective C中操作属性的基础是什么。我知道为任何实例变量创建getter和setter的基本要求,但什么时候? 我已经多次看到它们根本不使用属性,之后我们也很容易设置并获得变量的值。此外,我不清楚不同类型的属性,如原子,非原子,强,保留。 XCODE升级到4.2已经动摇了我关于内存管理的概念。有人可以在我心中清除云吗?
答案 0 :(得分:9)
属性始终是直接进行ivar访问的首选方式,主要有以下几个原因:
copy
,assign
,retain/strong
,weak
)关键词:
copy
:设置assign
:设置retain/strong
:对象保留在集weak
:在ARC中,这类似于assign,但在释放实例时会自动设置为nil
,也会在垃圾回收环境中使用。nonatomic
:访问者不是@synchronized
(线程安全),因此更快atomic
:访问者为@synchronized
(线程安全),因此速度较慢一般来说,你应该总是合成一个伊娃。如果出于性能原因需要更快的访问权限,您也可以直接访问合成的ivar。
答案 1 :(得分:2)
在打字的时候,我看到“Erik Aigner”的答案更快了。
关于属性的een示例,合成和自定义setter在堆栈上看到我的答案: Objective-C convention to prevent "local declaration hides instance variable" warning
有关ARC的定制教程,请参阅他的网站Ray wenderlich的演讲: