Это число фактически Ивар в частном классе реализации NSThread в. Класс _NSThreadInternal
, и его имя «_private». Внутри этого объекта ivar равен seqNum
.
Вы можете вытащить его напрямую, если вы готовы полагаться на недокументированные пути ключей. Это сделает это (и хороший вызов neilsbot при использовании valueForKeyPath вместо времени выполнения звонки):
@implementation NSThread (GetSequenceNumber)
- (NSInteger)sequenceNumber
{
return [[self valueForKeyPath:@"private.seqNum"] integerValue];
}
@end
Я протестировал его, установив вручную ivar с помощью вызовов во время выполнения, а затем NSLogging потока. Разумеется, описание отражало изменение. Это, очевидно, не задокументировано, поэтому ...
... использовать на свой страх и риск.
Это забавное упражнение, но, как правило, частные дела по какой-то причине. Исправленный код, безусловно, должен избегать подобных вещей, если все другие маршруты полностью не исчерпаны.
Возможно, он находится в '- [ нитьDictionary]'? (Вы можете хранить нить-локальную информацию в 'NSThread' _threadDictionary _...) –
nielsbot
Отличная идея, но нет кубиков: она пуста. :) –
Разве это не его указатель? Может не совпадать с идентификатором потока, который печатает NSLog. –