【发布时间】:2013-10-30 01:14:10
【问题描述】:
当我在 iOS 中为应用程序创建属性时,我应该什么时候使用“assign”?我什么时候应该使用“保留”?
两者相比有什么好处吗?
【问题讨论】:
标签: ios objective-c
当我在 iOS 中为应用程序创建属性时,我应该什么时候使用“assign”?我什么时候应该使用“保留”?
两者相比有什么好处吗?
【问题讨论】:
标签: ios objective-c
Assign 通常用于原始类型,编译器将创建 setter,以便完成的所有操作都是简单的分配操作。
而使用 'retain'(现在使用 ARC 称为“strong”)限定符在属性上设置值会导致您的支持实例变量获得(换句话说,保留)已设置对象的所有权。
对于对象,如果您不想按照描述获得所有权并且您正在使用 ARC,那么您很可能希望使用“弱”限定符而不是“分配”。
【讨论】:
如果您使用的是 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)
【讨论】: