0

当我们创建一个插座时,它的属性直接设置为弱类型。然而,弱类型包含可选值。我希望创建的插座具有强类型,以便它始终包含一个值。但是存在内存管理问题并且可以形成强引用循环。

有什么情况需要我创建一个强类型的插座吗?

4

2 回答 2

0

想象一下,您创建了一个 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.

在此处输入图像描述

于 2015-05-10T04:45:00.720 回答
0

通常,如果您可能在某些时候将它们从超级视图中删除并可能被读取,则仅需要强大的出口。如果它们很弱,它们会在移除它们后立即归零。您可以将它们保持为弱,并在删除它们之前强捕获它们,但声明它们强允许您跳过该步骤。

于 2015-05-10T07:45:05.243 回答