[英]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.