@interface ViewController ()
@property (nonatomic,strong) NSThread *thread;
@end
@implementation ViewController
-(void)viewDidLoad{
? ? [super viewDidLoad];
? ? self.view.backgroundColor = [UIColor whiteColor];
? ? //獲取這個常駐內(nèi)存的線程
? ? self.thread=? [ViewController longTermThread];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event{
? ? //在該線程上提交任務
? ? [self performSelector:@selector(test) onThread:self.thread withObject:nil waitUntilDone:NO];
}
-(void)test{
? ? NSLog(@"test");
? ? NSLog(@"%@",[NSThread currentThread]);
}
+ (void)entryPoint
{
? ? //設置當前線程名為MyThread
? ? [[NSThread currentThread] setName:@"MyThread"];
? ? //獲取NSRunLoop對象傀顾,第一次獲取不存在時系統(tǒng)會創(chuàng)建一個
? ? NSRunLoop*runloop = [NSRunLoopcurrentRunLoop];
? ? /*
?? ? 添加一個Source1事件的監(jiān)聽端口
?? ? RunLoop對象會一直監(jiān)聽這個端口屿衅,由于這個端口不會有任何事件到來所以不會產(chǎn)生影響
?? ? 監(jiān)聽模式是默認模式壹甥,可以修改為Common
?? ? */
? ? [runloopaddPort:[NSPort port] forMode:NSDefaultRunLoopMode];
? ? //啟動RunLoop
? ? [runlooprun];
}
+ (NSThread*)longTermThread
{
? ? //靜態(tài)變量保存常駐內(nèi)存的線程對象
? ? staticNSThread*longTermThread =nil;
? ? //使用GCD dispatch_once 在應用生命周期只執(zhí)行一次常駐線程的創(chuàng)建工作
? ? staticdispatch_once_tonceToken;
? ? dispatch_once(&onceToken, ^{
? ? ? ? //創(chuàng)建一個線程對象,并執(zhí)行entryPoint方法
? ? ? ? longTermThread = [[NSThreadalloc]initWithTarget:selfselector:@selector(entryPoint)object:nil];
? ? ? ? //啟動線程聪富,啟動后就會執(zhí)行entryPoint方法
? ? ? ? [longTermThreadstart];
? ? });
? ? returnlongTermThread;
}
@end