Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 何时创建强类型的出口?_Ios_Swift_Iboutlet_Strong References - Fatal编程技术网

Ios 何时创建强类型的出口?

Ios 何时创建强类型的出口?,ios,swift,iboutlet,strong-references,Ios,Swift,Iboutlet,Strong References,当我们创建插座时,其属性直接设置为弱类型。然而,弱类型包含一个可选值。我希望创建的outlet是强类型,以便它始终包含一个值。但存在内存管理问题,可能形成强引用周期 是否有任何情况需要创建一个强类型的outlet?假设您创建了UIView的子类,并将其命名为ViewA。现在,您将通过XIB或故事板创建ViewA。您将直接添加到ViewA中的所有子视图都将成为弱属性,因为ViewA将拥有它们,并将自己管理其子视图的内存分配 但是现在,如果您想在同一个XIB文件中创建一个ViewB,其中您已经拥有V

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


是否有任何情况需要创建一个强类型的outlet?

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

但是现在,如果您想在同一个XIB文件中创建一个ViewB,其中您已经拥有ViewA作为文件所有者,并且该ViewB不是ViewA的子视图,那么在创建ViewB的出口时,需要注意的是,它将成为一个
strong
出口

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

你可以在这本书里读到更多关于它的内容

编辑:通过创建ViewB,我的意思是将UIView拖放到XIB编辑器中,而不是作为现有ViewA的子视图。您可以将其创建为单独的对象。我附上了一个截图,以便于理解。因此,在本例中,按钮1、标签1和标签2的出口将
。而ViewA和ViewB的出口将
strong


通常,如果您可能在某个时候将插座从superview中删除并可能读取,则插座只需坚固即可。如果它们很弱,在移除它们后会立即变为零。你可以保持它们的脆弱性,在移除它们之前将它们牢牢捕获,但是声明它们为strong可以让你跳过这一步。

创建一个strong类型的出口并不意味着总是会有一个值哦…那么真的没有任何价值。如果你想在同一个XIB文件中创建一个ViewB,而你已经拥有ViewA作为文件所有者,请不要使用这一行编辑答案。如果答案对你有帮助,一定要接受。