- (void)test{
NSLog(@"2");
}
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_async(queue, ^{
NSLog(@"1");
[self performSelector:@selector(test) withObject:nil afterDelay:.0];
NSLog(@"3");
});
}
打印結(jié)果:1,3
原因:
- (void)performSelector: withObject: afterDelay: 本質(zhì)上是往當(dāng)前線程Runloop中添加定時器。
而子線程默認(rèn)沒有啟動Runloop,所以定時器無效。
解決方法:
在performSelector方法下面,添加
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
另外:- (void)performSelector: withObject: 方法
底層實現(xiàn)為消息發(fā)送機(jī)制。