This question already has answers here:
po [NSThread currentThread]

(2个答案)


已关闭8年。




当您打印NSThread的描述时,您将得到如下内容:
<NSThread: 0x1e511b70>{name = (null), num = 1}

这个“num”可用吗?

这仅用于调试,因此不需要清除Apple的批准流程。

最佳答案

该数字实际上是NSThread私有(private)实现类中的一个ivar。该类是_NSThreadInternal,其名称是“_private”。在该对象内部,ivar是seqNum

如果您愿意依赖未记录的 key 路径,则可以直接将其拉出。可以做到这一点(并且可以很好地调用neilsbot来使用valueForKeyPath而不是运行时调用):

@implementation NSThread (GetSequenceNumber)

- (NSInteger)sequenceNumber
{
    return [[self valueForKeyPath:@"private.seqNum"] integerValue];
}

@end

我通过使用运行时调用手动设置该ivar,然后通过NSLogging线程来对其进行测试。果然,描述反射(reflect)了这一变化。这显然没有记录,所以...

...使用风险自负。

这是一个有趣的练习,但是由于某种原因,事情通常是私有(private)的。除非所有其他路由都被彻底用尽,否则已发布的代码当然应该避免这种情况。

关于ios - iOS上的NSThread编号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15558411/

10-10 19:30