什么时候创建强类型的出口?

When to create an outlet of strong type?

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

有什么情况需要创建强类型的outlet吗?

假设您创建了 UIView 的子类并将其命名为 ViewA。现在您将通过 XIB 或故事板创建 ViewA。您要直接添加到 ViewA 中的所有子视图都将变为 weak 属性,因为 ViewA 将拥有它们并将由其子视图本身管理内存分配。

但是现在,如果你想在同一个 XIB 文件中创建一个 ViewB,其中你已经将 ViewA 作为文件所有者并且这个 ViewB 不会成为 ViewA 的子视图,那么在创建 ViewB 的出口时,它是请注意,它变成了 strong 插座。

所以简而言之,只有 XIB 或故事板中的顶级对象成为强引用,而这些顶级对象中的所有子视图,它们成为弱引用。

您可以在此 Apple documentation

中阅读更多相关信息

编辑:通过创建 ViewB,我的意思是您将 UIView 拖放到 XIB 编辑器中,但不是作为现有 ViewA 的子视图。您将其创建为一个单独的对象。我附上了截图以供理解。因此,在此示例中,Button 1、Label 1 和 Label 2 的出口将为 weak。而 ViewA 和 ViewB 的出口将是 strong.

通常,如果您可能会在某个时候将它们从超级视图中删除并可能重新读取,那么 outlet 只需要很强大。如果它们很弱,它们会在移除它们后立即变为零。您可以让它们保持弱状态,然后在删除它们之前将它们强捕获,但是声明它们强可以让您跳过该步骤。