以下是否属实:
弱 = unsafe_unretain = 分配
强=保留
如果这是为什么它们被重复?我们应该选择哪一个?
不,这不是真的。weak
表示不保留对象,另外,当对象被释放时,变量/属性将自动设置为 nil。unsafe_unretained
表示对象不保留,但没有自动归零。strong
并且retain
是等价的。
assign
通常用于原语,例如int
or double
,因为您只是在分配。unsafe_unretained
用于您知道没有被保留的 Objective-C 对象,并理解为什么这是不安全的。weak
是 iOS 5 中引入的一项新功能,类似于unsafe_unretained
ARC,但与 ARC 具有不同的语义。查看 Apple 的高级内存管理指南了解更多信息。
实际上,unsafe_unretained
如果您的目标是 iOS 5 或更高版本,您几乎永远不会使用。
strong
: 变量在其作用域内被保留。保留也用作强的同义词。copy
: 创建并保留一个副本。weak
: 用它来指向一个对象而不声明所有权。一旦对象被释放,指针将被取消。unsafe_unretained
: 与weak 相同,但释放后指针不为零。assign
: 原始值。如果您的目标是 iOS 4,则不能使用弱。请改用 unsafe_unretained。
在 ARC 之前,属性的默认值是分配的,现在默认值是强的。
weak
!=unsafe_unretain
weak
nil
如果它指向的对象被释放,它将自动将其指针转换为 a 。
展望未来,您应该将strong
&weak
用于对象和assign
原始类型