Quel numero è in realtà un Ivar nella classe di implementazione privata di NSThread. La classe è _NSThreadInternal
, e il suo nome è All'interno di questo oggetto, l'ivar è seqNum
È possibile estrarlo direttamente se si è disposti a fare affidamento su percorsi chiave non documentati. Questo lo farà (e buona chiamata neilsbot sull'utilizzo di valueForKeyPath invece di runtime chiamate):
@implementation NSThread (GetSequenceNumber)
- (NSInteger)sequenceNumber
{
return [[self valueForKeyPath:@"private.seqNum"] integerValue];
}
@end
L'ho provato impostando manualmente ivar con le chiamate di runtime e poi NSLoggiando il thread. Abbastanza sicuro, la descrizione riflette il cambiamento. Questo ovviamente non è documentato, quindi ...
... utilizzare a proprio rischio.
È un esercizio divertente, ma le cose sono in genere private per un motivo. Il codice spedito dovrebbe certamente evitare cose del genere a meno che tutte le altre rotte non siano state completamente esaurite.
fonte
2013-03-21 22:08:02
Forse è in '- [ threadDictionary]'? (È possibile memorizzare le informazioni locali del thread in "NSThread''s _threadDictionary _...) –
nielsbot
Ottima idea, ma nessun dado: è vuoto. :) –
Non è solo il suo puntatore? Potrebbe non essere uguale all'ID del thread stampato da NSLog. –