在定义闭包捕获列表的http://docs.cksource.com/ckfinder3-net/howto.html#howto_private_folders中
捕获列表中的每个项目都是弱者或无人物的配对 带有对类实例(如self)或a的引用的关键字 用一些值初始化的变量(例如delegate = self.delegate!)。这些配对写在一对正方形内 括号,用逗号分隔。
将捕获列表放在闭包的参数列表之前并返回 输入时输入:
lazy var someClosure: (Int, String) -> String = { [unowned self, weak delegate = self.delegate!] (index: Int, stringToProcess: String) -> String in // closure body goes here }
但是(1)简单地引用自我还是(2)用self初始化一个新变量之间的确切区别是什么?
var someClosure: () -> String = {
[unowned self]
// Use self here
}
var someClosure: () -> String = {
[unowned s = self]
// Use s here
}
这个新变量是否会修改原始自我的防御,还是一个影响前一个自我的新自我?
答案 0 :(得分:0)
变量只是一个内存位置的引用。根据变量类型 - 弱,强或无主,决定对象的生命周期。
如果在闭包内使用强变量,那个闭包将取得对象的所有权。它一直存在,直到关闭。
如果你使用weak,那么在该对象可用之前,这将引用该对象。当该对象释放时,变量设置为nil。
如果您使用无主,则永远不会拥有对象的所有权。即使释放了对象,也会指向该内存。
我在这里解释https://medium.com/@rajaths131/life-time-and-scope-of-swift-objects-da7c2e5f4e0f#.uzfy60x9s