在Xcode 6中创建IBOutlet的新行为

时间:2015-02-18 08:34:47

标签: ios interface-builder xcode6 weak unsafe-unretained

我记得在 Xcode 5 中,如果您将一个视图从故事板拖到代码中,它将创建一个具有weak属性的属性。现在在 Xcode 6 中,它使用unsafe_unretained作为默认值。这种变化可能是什么原因?

3 个答案:

答案 0 :(得分:3)

作为stated on Wikipedia

  

归零弱引用仅适用于Mac OS X 10.7“Lion”或   以后和iOS 5或更高版本,因为它们需要额外的支持   Objective-C运行时。使用ARC但需要支持的代码   早于Mac OS X Lion或iOS 5.0的操作系统版本无法使用   归零弱引用,因此必须使用unsafe_unretained weak   参考

您的项目部署目标iOS应该是iOS 5之前的东西(可能是iOS 4.0)。因此,Xcode正在创建unsafe_unretained而不是周,因为您的应用应该适用于iOS 4或之前的iOS。

答案 1 :(得分:-3)

weak属性就像unsafe_unretained一样,只是它们更聪明一些。释放分配给属性的对象后,weak引用会自动变为nil,以避免在向该对象发送消息(其内存地址)时发生崩溃。 Unsafe_unretained属性不会这样做。它们将始终保持分配给它的内存地址(除非您手动更改它),而不管与该地址关联的对象。弱引用可以防止在这种情况下崩溃,但结果仍然不会如预期的那样。如果您的代码编写得很好并且组织得很好,那么就不会发生这种情况。

难怪苹果将出口属性设置为unsafe_unretained

答案 2 :(得分:-3)

强大的参考(在大多数情况下您会使用)意味着您想拥有"拥有"您使用此属性/变量引用的对象。只要您(或任何其他对象)使用强引用指向它,编译器就会注意您分配给此属性的任何对象都不会被销毁。只有将属性设置为nil后,对象才会被销毁(除非一个或多个其他对象也拥有对它的强引用)。

相反,如果参考较弱,则表示您不想控制对象的生命周期。您引用弱的对象只会继续存在,因为至少有一个其他对象对它有强烈的引用。一旦不再是这种情况,对象就会被破坏,你的弱属性将自动设置为nil。 iOS中最常见的弱引用用例是:

  1. 委托属性,通常被弱引用以避免 保留周期,
  2. 视图控制器主视图的子视图/控件,因为那些 主要观点已强烈反对意见。
  3. unsafe_retained与weak相同,而retain与strong相同。