我简要地阅读了关于 ARC 的内容并认为好吧,一切都很强大,代表很弱。
现在我在界面生成器中创建一个视图并制作 IBOutlets,Xcode 的默认设置设置为弱。
这个建议似乎是有原因的,大多数 IBOutlets 想要弱属性是否有原因?
那是因为这些视图(IBOutlets)已经被保留,因为它们附加到它的超级视图?而且我们很少替换 IBOutlet 视图?
但是我认为将其设置为强没有什么害处,它有问题吗?
我简要地阅读了关于 ARC 的内容并认为好吧,一切都很强大,代表很弱。
现在我在界面生成器中创建一个视图并制作 IBOutlets,Xcode 的默认设置设置为弱。
这个建议似乎是有原因的,大多数 IBOutlets 想要弱属性是否有原因?
那是因为这些视图(IBOutlets)已经被保留,因为它们附加到它的超级视图?而且我们很少替换 IBOutlet 视图?
但是我认为将其设置为强没有什么害处,它有问题吗?
有关为什么IBOutlet
引用应该是弱的讨论,请参阅资源编程指南:Nib 文件。我从指南中引用:
出口通常应该是弱的,除了从文件所有者到 nib 文件中的顶级对象(或者,在 iOS 中,故事板场景)应该是强的。因此,您创建的 Outlets 通常应该很弱,因为:
- 例如,您为视图控制器的视图或窗口控制器的窗口的子视图创建的出口是对象之间的任意引用,并不暗示所有权。
- 强大的出口经常由框架类指定(例如,
UIViewController
的视图出口,或NSWindowController
的窗口出口)。
对于我自己的两分钱,strong
如果我拥有它,我就会制作东西,或者我需要一个强有力的参考,以防所有者离开并且我需要保留它,这两者都不适用。所以,与其问“为什么我不能成功strong
?”,我会问“我为什么要成功strong
?” 如果没有充分的理由这样做,我会让 Interface Builder 做这件事并成功weak
。
这只是偏好。weak 或 assign 的基本原理是超级视图、控制器等将在该图中的对象生命周期内持有强引用。
就个人而言,我是老派,并且喜欢强有力的参考——即使在这种情况下也是如此。有时,使用强引用意味着您可能需要显式破坏对象子图的组件(例如,在拆除时必须“打破”所有循环依赖关系)。我只在非常特殊的情况下使用弱,因为我喜欢一致性;当/如果出现问题以及阅读程序时,变量会更少。