【发布时间】:2019-11-29 11:19:43
【问题描述】:
在使用 Xcode 和 Swift 的 iOS 项目中,有没有一种简单的方法来检查对象的引用计数?自动引用计数 (ARC) 通常会为我们处理内存管理,但我在追踪我的应用程序中的内存泄漏时遇到了麻烦。我想要一种简单的方法来检查应用程序生命周期中任何给定点的任何对象的引用计数。有没有简单的方法来做到这一点?
【问题讨论】:
标签: ios swift xcode debugging memory
在使用 Xcode 和 Swift 的 iOS 项目中,有没有一种简单的方法来检查对象的引用计数?自动引用计数 (ARC) 通常会为我们处理内存管理,但我在追踪我的应用程序中的内存泄漏时遇到了麻烦。我想要一种简单的方法来检查应用程序生命周期中任何给定点的任何对象的引用计数。有没有简单的方法来做到这一点?
【问题讨论】:
标签: ios swift xcode debugging memory
只需在 lldb 上输入 po CFGetRetainCount(someVariable)
来源:https://developer.apple.com/documentation/corefoundation/1521288-cfgetretaincount
【讨论】:
我找到了一种使用 LLDB 调试器控制台命令的简单方法。如果有人知道另一种检查对象引用计数的好方法,请随时留下另一个答案。
首先,当您想要检查某个对象的引用计数时,使用断点在代码中的某个点暂停执行。控制台将显示(lldb)。单击它旁边的以插入光标。
键入language swift refcount array(其中“array”是我要检查的对象的名称;替换为您自己的对象的名称),然后按 Return。控制台会以这种格式输出对象的引用计数:
refcount data: (strong = 1, unowned = 0, weak = 0)
输入help 以查看更多控制台命令。他们有很多。我已经使用 Xcode 五年了,今天我才知道它们。这可能是一个超级有用的调试工具。仅供参考,这里有一些最有用的:
po self
代表“打印对象”。打印一个对象的漂亮描述。我只是在这里使用“自我”作为示例。您可以替换自己对象的名称。
p self
“打印”命令。作为打印对象,但更详细。再次以“self”为例。
step
前进一行代码。
continue
恢复程序执行。
expr
“表达式”命令。让您输入 Swift 代码来修改变量。例如,向数组对象添加一些数据:
expr array.insert(343, at: 0)
您甚至可以通过这种方式更改 UI 元素,如下例所示:
expr self.view.tintColor = UIColor.red
【讨论】:
NSMutableArray 创建一个错误,以便我可以练习使用调试器命令:) 在正常情况下,我同意是的,应该使用本机 Swift 类型如果可能的话。