首页 > 解决方案 > 是否有可能在 Swift 中获得闭包的保留计数?

问题描述

在 Swift 中,闭包是引用类型。这意味着(我认为,如果我错了,请纠正我)他们的生命周期由保留计数管理。我可以使用CFGetRetainCount获取对象的保留计数,但这不适用于闭包,因为它们不符合AnyObject(或任何协议)。

在有人介入并告诉我我通过尝试手动获取任何内容的保留计数而做错事之前,我知道。这纯粹是为了实验向我自己证明,这就是运行时管理闭包生命周期的方式。

标签: swiftclosuresautomatic-ref-countingretaincount

解决方案


CFGetRetainCount如果将闭包声明为,则可以使用@convention(block),因为这将指示编译器生成一个 Objective-C 块,该块对于所有预期目的都是一个对象:

let closure: @convention(block) () -> Void = {
    print("test")
}

print(CFGetRetainCount(unsafeBitCast(closure, to: CFTypeRef.self)))

推荐阅读