Xcode 故事板出口:弱或不弱

Xcode Storyboards Outlet: To weak or not to weak

刚得到一个新的 MBPro,这意味着 Xcode 的全新安装。在助手中使用故事板和(控制)拖动创建出口时,现在默认为 weak var。不久前,这是默认设置。但是后来不知什么时候,好像转不弱了。

为什么默认值会改变,绑定到按钮和其他东西的出口变量的更好默认值是什么?

正如holex所说。这取决于您的用例。没有最佳实践。并且有处理视图的历史增长选项。
首先:
如果将视图添加到视图层次结构(例如 addSubview()),它将具有很强的关系。

没关系,除非您想使用添加的视图。为此,您需要参考。

一种变体是遍历子视图数组并查找您的视图。回到过去,对于更简单的 UIs,这就足够了,这就是它内置的原因。每个视图都可以有一个标签,你的视图的父视图可以找到那个标签。

func viewWithTag(_ tag: Int) -> UIView?

另一种方法是保存对视图的引用而不是查找它。这就是奥特莱斯发挥作用的地方。但是,如果您持有对某个对象的引用,则默认情况下会创建一个强关系。这意味着有两个地方可以使对象保持活动状态。

那时候真好。应用程序更简单,如果视图卡住,也没什么大不了的,因为垃圾收集器会在处理应用程序时丢弃所有对象。 (好吧,这绝对不是一个好习惯)

如果你有一个更静态的UI,假设你正在试验,这并不重要。关系薄弱是可以的。

顺便说一句 Xcode 询问您是否需要强参考或弱参考,并使用您的决定作为默认值。可能你改过一次就习惯了新的 "default"

如果你有一个更动态的 UI,那么看看 UITableView 是如何工作的。 UITableViewCells 是视图,您通常不会持有对它们的引用来修改它们。

但是对于奥特莱斯最好的建议是:问问自己是否真的需要。以某种方式修改 UIView 的代码通常应该与视图自己的 class 一起使用,而不是将所有代码放在一个地方。 (MVC 并不意味着所有代码都进入 UIViewController)