您当前的位置: 首页 >  ios

如何写一个显示iOS线程编号的小扩展

发布时间:2020-03-07 15:30:33 ,浏览量:0

我们在测试iOS下多线程并发编程时往往需要区分不同的线程。

我们知道Thread有一个name实例变量可以用来给线程命名,但是那些系统自动创建的线程你就拿它没办法了吧?

在这里插入图片描述

其实Thread实例自身是有编号的,不过并没有直接导出。

我们用以下语句可以窥探一下:

print("\(Thread.current)") 

显示结果为:

“{number = 1, name = main}”

可以看到主线程的编号为1。

那我们如何取得这个编号呢?

很简单:解析字符串!!!

在这里插入图片描述

是不是很直接!?

其实解析字符串是正则的强项,但这里使用了另一种更直接,更暴力的方法,博君一笑:

extension Thread{ var number:Int{ // 取得线程描述第一部分 let p0 = self.description.split(separator: ",").map {String($0)}[0] // 取得线程描述第二部分 let p1 = p0.split(separator: "{").map {String($0)}[1] // 后面的格式是固定的,所以这里硬编码number偏移为9 let numberStartIndex = p1.index(p1.startIndex, offsetBy: 9) // 这里很暴力的强转了,实际代码中不要学我... return Int(String(p1[numberStartIndex...]))! } } 

现在对于任何线程我们可以轻松取得它们的编号了:

Thread.current.number

That’s all!!!

在这里插入图片描述

这是一个短篇,感谢观赏 ;)

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    107766博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1831s