- (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");
});
}
打印结果:1,3
原因:
- (void)performSelector: withObject: afterDelay: 本质上是往当前线程Runloop中添加定时器。
而子线程默认没有启动Runloop,所以定时器无效。
解决方法:
在performSelector方法下面,添加
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
另外:- (void)performSelector: withObject: 方法
底层实现为消息发送机制。
网友评论