基础概念
串行:代码顺序执行
并行:多个任务同时执行(只是处理器多个任务间进行切换)
同步:多个线程需要操作一个资源时,同一时间只能一个线程操作,,其余需要等待其完成。
异步:多个线程操作时,不需等待前一个完成,直接进行下一步。
死锁出现情况
NSLog(@"111");
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"文城");
});
NSLog(@"金城");
打印出”111”,程序会报错。
因为在执行完”111”后,会等待block执行,但是block在主线程执行完后才会执行。
使用
1.延迟执行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(延迟时间 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//做得事情
});
2.单列
+(instancetype)getInstance{
static MyClass *object;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
objct = [[self alloc]init];
});
return object;
}
3.定时器
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
__weak __typeof__(self) weakSelf = self;
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 间隔时间 * NSEC_PER_SEC, 可推迟时间 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
做得事情
if (条件) {
//取消定时器,必须加上,不然就不会回调
dispatch_cancel(timer);
}
});
//启用
dispatch_resume(timer);