【问题标题】:When to use "assign" or "retain" in properties declaration? [duplicate]何时在属性声明中使用“分配”或“保留”? [复制]
【发布时间】:2013-10-30 01:14:10
【问题描述】:

当我在 iOS 中为应用程序创建属性时,我应该什么时候使用“assign”?我什么时候应该使用“保留”?

两者相比有什么好处吗?

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    Assign 通常用于原始类型,编译器将创建 setter,以便完成的所有操作都是简单的分配操作。

    而使用 'retain'(现在使用 ARC 称为“strong”)限定符在属性上设置值会导致您的支持实例变量获得(换句话说,保留)已设置对象的所有权。

    对于对象,如果您不想按照描述获得所有权并且您正在使用 ARC,那么您很可能希望使用“弱”限定符而不是“分配”。

    【讨论】:

      【解决方案2】:

      如果您使用的是 ARC,则不需要使用保留,因为您不是手动管理内存。

      Retain:如果您不使用 ARC,则需要手动管理应用的内存。在这种情况下,如果您对一个变量使用保留,您将计数加一。然后,计数需要达到 0 才能被释放。

      Assign:当调用一个assign属性的getter时,它返回一个对实际数据的引用。通常,当您拥有原始类型的属性时,您会使用此属性。

      强:替换保留属性,作为 Objective-C 自动引用计数 (ARC) 的一部分。在非 ARC 代码中,它只是保留的同义词。您用于要保留参考的对象。另一方面,我们有弱点:

      @property (nonatomic, strong) UIColor *myColor
      @property (nonatomic, assign) BOOL myBOOL
      

      无论如何,这个链接真的很有用,而且比这里解释得更好。 Objective-C declared @property attributes (nonatomic, copy, strong, weak)

      【讨论】:

        猜你喜欢
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-21
        • 2011-08-16
        • 2014-10-22
        • 1970-01-01
        相关资源
        最近更新 更多