답변:
NSLog(@"%@", [NSThread currentThread]);
name
심지어 주요 비어 설명을 반환하고 number
아무 곳에도 발견 할 수있다
NSString *s = [NSString stringWithFormat:@"%@", [NSThread currentThread]]; int threadNum = -1; sscanf(s.UTF8String, "<NSThread: 0x%*12[0-9a-f]>{number = %d", &threadNum);
#include <pthread.h>
...
mach_port_t machTID = pthread_mach_thread_np(pthread_self());
NSLog(@"current thread: %x", machTID);
[NSThread currentThread]
클래스 메소드는 NSThread 객체를 반환합니다. 해당 스레드 개체의 주소를 기록 할 수 있지만 Xcode 디버거에 표시되는 것과 같은 숫자 스레드 ID를 어떻게 얻습니까? (메인 스레드의 경우 스레드 1, 앱에서 생성되는 각 추가 스레드의 수는 증가합니다.)
Swift에서
print("Current thread \(NSThread.currentThread())")
다음과 같이 해킹 할 수 있습니다 (예쁘게 인쇄되지만 번호를 얻을 때까지 계속해서 분할 할 수 있습니다).
+ (NSString *)getPrettyCurrentThreadDescription {
NSString *raw = [NSString stringWithFormat:@"%@", [NSThread currentThread]];
NSArray *firstSplit = [raw componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"{"]];
if ([firstSplit count] > 1) {
NSArray *secondSplit = [firstSplit[1] componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"}"]];
if ([secondSplit count] > 0) {
NSString *numberAndName = secondSplit[0];
return numberAndName;
}
}
return raw;
}