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

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

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

在这里插入图片描述

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

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

print("\(Thread.current)")

显示结果为:

“<NSThread: 0x600000ba2b80>{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!!!

在这里插入图片描述

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

大熊猫侯佩 CSDN认证博客专家 Swift Objective-C Xcode
非自由程序员,CSDN博客认证专家。
CSDN汇编板块版主, CSDN其他开发语言大版版主。

对App、以及Cocos2D、SpriteKit游戏开饶有兴趣。目前常用的语言是ObjC、Swift、Ruby等。不过看到编程艺术、ASM、逆向和C时依然欲罢不能。虽然不是,但喜欢黑客的思维和哲学,认为社会工程学很酷,但还没有实际用来撩过妹。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付 39.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值