ios - @property 在 Objective-C 中保留、分配、复制、非原子性

标签 ios objective-c iphone memory-management

作为Objective-C的新手,有人可以给我一个关于保留、分配、复制以及我遗漏的任何其他内容的概述,遵循@property指令吗?他们在做什么,为什么我要使用一个而不是另一个?

最佳答案

MrMage 链接的文章不再有效。所以,这是我在 Objective-C 中(非常)短时间编码中学到的东西:

非原子与原子
- “原子”是默认值。始终使用“非原子”。我不知道为什么,但我读过的书说“很少有理由”使用“原子”。 (顺便说一句:我读的书是 BNR“iOS 编程”书。)

读写与只读
- “读写”是默认值。当您@synthesize 时,将为您创建一个 getter 和一个 setter。如果您使用“只读”,则不会创建任何 setter。将它用于您不想在对象实例化后更改的值。

保留与复制与分配

  • “分配”是默认值。在由@synthesize 创建的 setter 中,值将简单地分配给属性。我的理解是“assign”应该用于非指针属性。
  • 当属性是指向对象的指针时,需要“保留”。 @synthesize 生成的 setter 将保留(也就是添加保留计数)对象。完成后,您需要释放该对象。
  • 当对象可变时需要“复制”。如果您需要对象的当前值,并且您不希望该值反射(reflect)对象的其他所有者所做的任何更改,请使用此选项。完成后您需要释放对象,因为您保留了副本。
  • 关于ios - @property 在 Objective-C 中保留、分配、复制、非原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2255861/

    相关文章:

    iphone - 获取驻留在 UIWindow 中的当前 View 的名称

    iphone - 在 Core Data 应用程序中更新预加载数据和用户数据

    c# - MonoTouch 中的事件变为空

    iphone - 如何在不使用设置 alpha 的情况下合并 2 个图像?

    javascript - onblur 在 iOS 和 Mac Safari 上禁用单击(外部输入和单击其他输入)也会强制打开键盘并且不会关闭 - (Jquery)

    ios - Xcode 6.1 : UIView. animateWithDuration 额外参数 'usingSpringWithDamping'

    html - iPhone/iOS/Safari 不会改变显示 :none to display:block using :hover

    ios - 单点触控。从 ViewController 中移除特定的 UIImage subview

    ios - 使用AFNetworking与OCMock的测试方法

    c++ - NSOperationQueue 与 pthread 优先级