Swift闭包是否保留捕获的变量?
我发现
Swift闭包并不像我期望的那样保留捕获的变量.
class AAA { } var a1 = AAA() as AAA? // expects RC == 1 var a2 = { ()->AAA? in return a1 } // expects RC == 2,retained by `Optional<AAA>` a1 = nil // expects RC == 1 a2() // prints nil,???? 我对此非常困惑,因为我一直认为默认情况下会保留捕获的变量.但是,如果我使用捕获列表显式捕获它,它将保留. class AAA { } var a1 = AAA() as AAA? var a2 = { [a1]()->AAA? in return a1 } a1 = nil a2() // prints {AAA},alive as expected. 我重新阅读了Swift手册,但我找不到相关说明.捕获列表用于明确设置无主,我仍然感到困惑.
是的,记录在
Capturing Values:
规则是:如果引用捕获的变量而不修改它,则按值捕获.如果您修改它,则通过引用捕获它.当然,除非您通过定义捕获列表明确覆盖它. 附录上述陈述似乎不正确.无论是否在封闭内部进行修改,都可以通过引用进行捕获.阅读@newacct评论. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |