xcode - 如何以编程方式获取 Xcode 显示的线程名称
问题描述
如果应用程序没有特别重命名线程,Xcode 调试器会显示名称如“Thread N”的线程。如何在我的应用程序中获取当前线程的名称,因为 Xcode 会显示它?
或者,Xcode 如何确定线程索引?即使应用程序将线程重命名为“Some Name”,Xcode 仍会为其分配一个索引,因为线程将在调试器中显示为“Some Name (N)”。
或者,Xcode 如何枚举活动线程?
解决方案
NSThread
这是您可以检索的底层证券的私有/不透明属性value(forKeyPath:)
:
if let number = Thread.current.value(forKeyPath: "private.seqNum") as? Int {
...
}
您还可以获得以下description
内容NSThread
:
let string = Thread.current.description // <NSThread: 0x600003971340>{number = 7, name = foo}
然后从中解析出来:
let regEx = try! NSRegularExpression(pattern: #"number = (\d+),"#, options: [])
if
let match = regEx.firstMatch(in: Thread.current.description, options: [], range: NSRange(string.startIndex..., in: string)),
let range = Range(match.range(at: 1), in: string)
{
let threadNumberString = String(string[range])
print(threadNumberString)
}
但是,我建议在生产代码中避免使用这两种技术。它们很脆弱,取决于私有实现细节。此外,App Store 指南禁止使用私有界面。
所以,如果这只是一个求知欲的问题,那很好。但我建议不要在实际应用程序中这样做。此外,在 GCD 的世界中,我们通常使用队列,并将我们的代码从这些线程细节中抽象出来。
看:
推荐阅读
- python - 使用 Pyramid,在添加路由后使用 route_url
- python - 从 Python 数据类装饰器中的 __repr__ 方法中删除引号
- java - 在 actionperformed 中创建 JDialog
- mongodb - Next.js + Apollo + Mongodb:在 SSR 模式下无法访问 Apollo 上下文
- kubernetes - 在 Kubernetes 上安装 awx-operator 时出现 AWX-Web 错误
- c - 如何将数组从 PLC 程序传递到 TwinCAT 中的 C 模块实例?
- raspberry-pi3 - 无法将裸 Menment Raspberry 二进制文件启动到 0x80000
- javascript - 远程连接的 WebSocket 问题
- reactjs - 一次 ReactJS 列出对象列表中的项目
- javascript - Fetch 被触发两次