swift - 是否有可能在 Swift 中获得闭包的保留计数?
问题描述
在 Swift 中,闭包是引用类型。这意味着(我认为,如果我错了,请纠正我)他们的生命周期由保留计数管理。我可以使用CFGetRetainCount获取对象的保留计数,但这不适用于闭包,因为它们不符合AnyObject(或任何协议)。
在有人介入并告诉我我通过尝试手动获取任何内容的保留计数而做错事之前,我知道。这纯粹是为了实验向我自己证明,这就是运行时管理闭包生命周期的方式。
解决方案
CFGetRetainCount
如果将闭包声明为,则可以使用@convention(block)
,因为这将指示编译器生成一个 Objective-C 块,该块对于所有预期目的都是一个对象:
let closure: @convention(block) () -> Void = {
print("test")
}
print(CFGetRetainCount(unsafeBitCast(closure, to: CFTypeRef.self)))
推荐阅读
- visual-studio - 我的组件
没有返回另一个脚本中存在的数组 - c++-winrt - 将基于示例的旧 C++ Winrt dll 项目转换为 Windows 运行时组件项目
- javascript - 将对象数组推入另一个对象数组
- sql-server - 在 T-SQL 中,如何对也在 Count 方法中计算的行值求和
- reactjs - 从服务中检索数据以进行特定的渲染定制
- python - 如何使用 tf.nn.batch_normalization 处理移动均值和移动方差?
- bash - 采购和流程替代
- android - 如何在 Android 8 中从 phonegap 应用程序显示 PDF
- laravel - Laravel:关系用户有一个组,组有很多用户
- javascript - Javascript MVC在空格后删除