2

以下是否属实:

弱 = unsafe_unretain = 分配

强=保留

如果这是为什么它们被重复?我们应该选择哪一个?

4

4 回答 4

6

不,这不是真的。weak表示不保留对象,另外,当对象被释放时,变量/属性将自动设置为 nil。unsafe_unretained表示对象不保留,但没有自动归零。strong并且retain是等价的。

于 2012-05-23T14:55:23.987 回答
2

assign通常用于原语,例如intor double,因为您只是在分配。unsafe_unretained用于您知道没有被保留的 Objective-C 对象,并理解为什么这是不安全的。weak是 iOS 5 中引入的一项新功能,类似于unsafe_unretainedARC,但与 ARC 具有不同的语义。查看 Apple 的高级内存管理指南了解更多信息。

实际上,unsafe_unretained如果您的目标是 iOS 5 或更高版本,您几乎永远不会使用。

于 2012-05-23T14:55:20.343 回答
2
  • strong: 变量在其作用域内被保留。保留也用作强的同义词。
  • copy: 创建并保留一个副本。
  • weak: 用它来指向一个对象而不声明所有权。一旦对象被释放,指针将被取消。
  • unsafe_unretained: 与weak 相同,但释放后指针不为零。
  • assign: 原始值。

如果您的目标是 iOS 4,则不能使用弱。请改用 unsafe_unretained。
在 ARC 之前,属性的默认值是分配的,现在默认值是强的。

于 2012-05-23T14:56:36.740 回答
1

weak!=unsafe_unretain

weaknil如果它指向的对象被释放,它将自动将其指针​​转换为 a 。

展望未来,您应该将strong&weak用于对象和assign原始类型

于 2012-05-23T14:55:04.947 回答