我有一个非常简单的类:

class TestClass {}

然后我创建了这个类的一个实例:

let instance = TestClass()

之后,我启动了我的项目(调试构建)并在Xcode控制台运行命令:

language swift refcount instance

我得到的是:

recount数据:(strong = 3,unowned = 1,weak = 1)

我想知道为什么我的实例有3个强引用,1个无主引用和1个弱引用,如果事实上只有1个强引用.

推荐答案

language swift refcount instance显示3个强引用的原因可能是因为将实例保留在调试代码中.此外,如果你重复这个命令,你会得到递增的结果:

(lldb) language swift refcount instance
refcount data: (strong = 3, unowned = 1, weak = 1)
(lldb) language swift refcount instance
refcount data: (strong = 4, unowned = 1, weak = 1)
(lldb) language swift refcount instance
refcount data: (strong = 5, unowned = 1, weak = 1)

这是Xcode/runtime bug.

另外,you can use CFGetRetainCount判断实例上的引用计数:

let instance = TestClass()
print(CFGetRetainCount(instance)) // prints "2"

你得到"2"的原因是instancelet instance静态变量保留,以及它被保留在CFGetRetainCount函数中.你可以通过打电话来证明这一点

print(CFGetRetainCount(TestClass())) // prints "1"

Swift相关问答推荐

@ MainActor + Combine不一致的编译器错误

Swift concurrency reload/await,支持只执行成功并重试

如何将CodingKeys作为数组而不是枚举传递到类外部的函数中?

SwiftUI路径平滑连接两条线

SwiftUI如何能够在Text中使用字符串字面量来创建LocalizedStringKey?

设备上ScrollView为什么会将内容高度更改为随机值,而在预览上不会? - 优化后的标题:设备上ScrollView内容高度随机变化问题解决

如何在 AppDelegate for Cocoa macOS 中创建 mainMenu 和菜单项?

将每个枚举 case 与 Swift 中的一个类型相关联

SwiftUI View .tint(_ Color) 方法不起作用

Swift 非参与者隔离闭包

为什么 SwiftUI 不在工具栏菜单中反映 @State 属性值?

来自数据的 SwiftUI 图像

.onTapGesture 不适用于 Stepper,仅适用于其文本

如何在界面生成器中创建 UILayoutGuide?

Swift 中 NSFetchRequest 的多个 NSPredicates?

在 Swift 框架中加载资源(例如故事板)

由于编译器中的内部保护级别,无法访问框架 init 中的公共 struct

如何使用 swift 在 tableview 中填充两个不同数组的两个部分?

Facebook SDK 4.0 IOS Swift 以编程方式注销用户

Swift UITableView reloadData 在一个闭包中