iOS支持多个层次的多线程编程,层次越高抽象程度越高,使用起来也越方便,也是苹果推荐的方式。编程
本节重点介绍GCD的使用:多线程
几个例子:并发
一、顺序队列异步执行iphone
异步不阻塞异步
- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"队列开始执行...."); dispatch_queue_t queue ; queue = dispatch_queue_create("iphone.book.queue", NULL); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:5]; NSLog(@"队列之中运行..."); }); NSLog(@"队列以后运行...."); }
二、顺序队列同步执行:async
同步阻塞函数
- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"队列开始执行...."); dispatch_queue_t queue ; queue = dispatch_queue_create("iphone.book.queue", NULL); dispatch_sync(queue, ^{ [NSThread sleepForTimeInterval:5]; NSLog(@"队列之中运行..."); }); NSLog(@"队列以后运行...."); }
三、并发队列异步执行oop
- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"队列开始执行...."); dispatch_queue_t queue ; queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:5]; NSLog(@"队列之中第一个任务运行..."); }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:5]; NSLog(@"队列之中第二个任务运行..."); }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:5]; NSLog(@"队列之中第三个任务运行..."); }); NSLog(@"队列以后运行...."); }
四、主线程队列spa
- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"队列开始执行...."); dispatch_queue_t queue ; queue = dispatch_get_main_queue(); dispatch_async(queue, ^{ lblInfo.text = 计算结果 }); NSLog(@"队列以后运行...."); }
【注】:异步执行代码的其它方法:线程
除了经过多线程的方式进行异步代码执行外,还有其它方式来进行异步操做。
一、performSelector: withObject: afterDelay:
该方法是NSRunLoop对象针对NSObject类添加的类别(extension),所以基本全部的类都能执行该方法。
二、performSelectorOnMainThread: withObject: waitUntilDone:
该方法是NSThread类为NSObject类添加的方法。
三、scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:
经过NSTimer类的类方法,在必定的时间异步执行selector指定的方法。