多线程相关问题

为什么不执行test方法 ?
performSelector :withObject:afterDelay: 本质是一个定时器,且当前在子线程执行performSelector :withObject:afterDelay:方法,子线程没有runloop,因此不会执行performSelector :withObject:afterDelay:方法,需要自己手动添加runloop才能实现执行performSlector方法。

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    NSLog(@"任务1执行");
    dispatch_async(queue, ^{
        NSLog(@"任务2执行");
        [self performSelector:@selector(test) withObject:nil afterDelay:2.0];
//   此方法执行
//        [self performSelector:@selector(test) withObject:nil withObject:nil];
        NSLog(@"任务3执行");
    });
    NSLog(@"任务4执行");

想要执行test方法 添加如下


//[[NSRunLoop currentRunLoop] addPort:[[NSPort alloc]init] forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

为什么 [self performSelector:@selector(test) withObject:nil withObject:nil]可以实现执行?
因为此方法没有定时器,等价于直接[self test];

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,800评论 1 32
  • runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, ...
    made_China阅读 4,930评论 0 7
  • runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, ...
    SOI阅读 21,949评论 3 63
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    iOS菜鸟大大阅读 4,055评论 0 1
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类...
    司马DE晴空阅读 5,118评论 0 7