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