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指定的方法。