小编Jun*_*yan的帖子

为什么Swift关闭不能捕获自我?

我正在测试Xcode游乐场的快速关闭.

这是我的代码:

import UIKit

class A{
    var closure: ()->() = {}

    var name: String = "A"
    init() {
        self.closure = {
            self.name = self.name + " Plus"
        }
    }

    deinit {
        print(name + " is deinit")
    }
}

var a: A?
a = A()
a = nil
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,a是封闭自包含的,所以a永远不会释放.

但是,当我在最后一行之前添加这一行时:

a?.closure = { a?.name = "ttt" }
Run Code Online (Sandbox Code Playgroud)

然后,我在输出窗口中发现"A is deinit",这意味着a已被释放.为什么?是不是回收参考?

要进行测试,我使用一个函数来设置闭包,代码是版本2:

import UIKit

class A{
    var closure: ()->() = {}
    func funcToSetClosure(){
        self.closure = { self.name = "BBB"}
    }
    var name: …
Run Code Online (Sandbox Code Playgroud)

closures automatic-ref-counting swift

6
推荐指数
1
解决办法
2005
查看次数

标签 统计

automatic-ref-counting ×1

closures ×1

swift ×1