当我们创建一个插座时,它的属性直接设置为弱类型。然而,弱类型包含可选值。我希望创建的插座具有强类型,以便它始终包含一个值。但是存在内存管理问题并且可以形成强引用循环。
有什么情况需要我创建一个强类型的插座吗?
当我们创建一个插座时,它的属性直接设置为弱类型。然而,弱类型包含可选值。我希望创建的插座具有强类型,以便它始终包含一个值。但是存在内存管理问题并且可以形成强引用循环。
有什么情况需要我创建一个强类型的插座吗?
想象一下,您创建了一个 ViewA 的子类UIView
并将其命名为 ViewA。现在您将通过 XIB 或情节提要创建 ViewA。您要直接在 ViewA 中添加的所有子视图都将成为weak
属性,因为 ViewA 将拥有它们,并将自行管理其子视图的内存分配。
但是现在,如果你想在同一个 XIB 文件中创建一个 ViewB,你已经有 ViewA 作为文件所有者,并且这个 ViewB 不会是 ViewA 的子视图,那么在创建 ViewB 的出口时,要注意它变成一个strong
出口。
所以简而言之,只有 XIB 或故事板中的顶级对象成为强引用,而这些顶级对象中的所有子视图,它们成为弱引用。
您可以在此Apple 文档中了解更多信息
编辑:通过创建 ViewB,我的意思是将 UIView 拖放到 XIB 编辑器中,而不是作为现有 ViewA 的子视图。您将其创建为单独的对象。我附上了截图以供理解。因此,在本例中,按钮 1、标签 1 和标签 2 的插座将为weak
. 而 ViewA 和 ViewB 的出口将是strong
.
通常,如果您可能在某些时候将它们从超级视图中删除并可能被读取,则仅需要强大的出口。如果它们很弱,它们会在移除它们后立即归零。您可以将它们保持为弱,并在删除它们之前强捕获它们,但声明它们强允许您跳过该步骤。