繁体   English   中英

在Swift中为同一个变量使用weak和optional是多余的吗?

[英]Is it redundant in Swift to use weak and optional for the same variable?

我是Swift的新手,在Apple文档中我看到了:

只要有效的引用在其生命周期中的某个时刻变为> nil,就应使用弱引用。

我不应该仅通过使用“?”来实现吗? 对于可选类型?

换一种说法:

weak ? 交叠?

如果weak时我没有将变量定义为optional变量,那么编译器会抱怨,因此我觉得可以删除它而忘了它,但是我只是误解了它。

谢谢!

不,弱点和可选部分不相同,但是两者之间存在一些相互作用。

可选只是意味着变量可以为nil ,可以是您自己分配nil,也可以是通过其他方式变为nil。

weak关键字与内存管理有关。 当变量不是 weak变量(即强变量)时,这意味着ARC对分配的实例拥有强大的引用。 因此,即使没有其他引用,该实例仍将保留在内存中,因为该变量仍“持有它”。

当aa变量为weak变量时,它不持有对该变量的强引用。 这意味着当没有其他强引用时,实例将被释放,并且变量将自动变为nil 这也解释了为什么弱变量必须是可选的。

您链接到的文档实际上很清楚地解释了这一点。

可选属性和非可选属性的不同之处在于,可选属性可以为nil ,而非可选属性则不能。

weak属性和strong属性(默认情况下,属性为strong ,没有weak关键字)属性的区别在于, weak属性不会增加属性的保留数,而strong属性会增加。 如果某个weak资产没有在其他地方强烈保留,它将被释放。 weak属性也必须是可选的。

weak与内存管理有关,即ARC是否应从内存中删除该变量。 如果您的变量是弱变量,则一旦对该内存的所有强引用被破坏,则ARC将立即清除其指向的内存,并且当清除该内存时,即使变量是非可选的,它也将为nill,因为其内存为已清除。

但是optional与内存无关,它与变量值直接相关,它可以包含实际值或nil。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM