iOS 多线程相关 线程组

别说谁变了你拦得住时间么 提交于 2020-02-06 16:58:25

 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
      dispatch_async(queue, ^{
          NSLog(@"1");
          //这句话的本质是往runloop中添加定时器
          [self performSelector:@selector(test) withObject:nil afterDelay:.0];
          NSLog(@"3");
          //若不启动runloop 子线程中是不会执行定时器的 打印结果为 1 3 执行了 打印结果为 1 3 2
          [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
      });
}
-(void)test{
    NSLog(@"2");
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSThread *thred = [[NSThread alloc]initWithBlock:^{
        NSLog(@"1");
        //启动runloop 这时候runloop是处于休眠状态 等待后面给它发消息 ;如不执行 打印为1 并且崩溃 
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantPast]];
    }];
    [thred start];
    [self performSelector:@selector(test) onThread:thred withObject:nil waitUntilDone:YES];
}
-(void)test{
    NSLog(@"2");
}

 

线程组

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    dispatch_queue_t queue = dispatch_queue_create("myqueue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_group_t group = dispatch_group_create();
    
    dispatch_group_async(group, queue, ^{
        for (int i =0; i<5; i++) {
            NSLog(@"1-%@",[NSThread currentThread]);
        }
    });
    dispatch_group_async(group, queue, ^{
        for (int i =0; i<5; i++) {
            NSLog(@"2-%@",[NSThread currentThread]);
        }
    });
    
//    dispatch_group_notify(group, queue, ^{
//        dispatch_async(dispatch_get_main_queue(), ^{
//            for (int i =0; i<5; i++) {
//                NSLog(@"3-%@",[NSThread currentThread]);
//            }
//        });
//    }); 等价月=于下面
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        for (int i =0; i<5; i++) {
            NSLog(@"3-%@",[NSThread currentThread]);
        }
    });
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!