我可以在Xcode中指定自己的"线程名称"吗?

Quu*_*one 9 xcode multithreading nsthread

Xcode的"线程列表"窗格显示了几个特殊线程的英文名称:com.apple.main-thread,com.apple.libdispatch-manager,com.dispatchfractal.opencl,com.dispatchfractal.opengl,com.apple.root.低优先级,但对于用户创建的线程,该字段只是空白.

有没有办法从我的应用程序以编程方式设置"线程名称"字段?例如,如果我有一个专门用于网络I/O的线程,我希望它在调试器中显示为"com.example.network-io"; 如果我生成五个工作线程,我希望能够将它们命名为"worker A","worker B"等.Xcode是否可以从我可以挂钩的某些API中获取其线程名称?也许是这样的CFAssignDebuggerNameToCurrentThread?:)

在此输入图像描述

Vla*_*mir 10

可能不完全不是你想要的,但是NSThread有setName:允许你设置线程名称的方法,你可以在线程上附加有意义的名字,这样你就可以在调试器中获得以下内容:

[[NSThread mainThread] setName:@"That is main thread!"];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

还要记住,某些api(如大中央调度)与线程池一起运行,因此无法保证在哪个线程上执行操作

编辑: com.apple.main-thread,com.apple.libdispatch-manager等有相应的调度队列的标签.您可以在使用dispatch_queue_create函数创建队列时设置标签值,然后使用dispatch_queue_get_label函数从队列中获取标签值.

似乎没有API来更改现有调度队列的标签值,我不建议更改系统队列的标签.