GCD總結(jié)

?//1.創(chuàng)建隊列

? ? //第一個參數(shù)為標識? 寫什么都可以

? ? //第二個參數(shù)為 并發(fā)隊列 (隊列的類型)? DISPATCH_QUEUE_SERIAL為串行隊列

? ? dispatch_queue_t? queue =? dispatch_queue_create("XHWGCD", DISPATCH_QUEUE_CONCURRENT);

? ? //2.創(chuàng)建任務

? ? dispatch_async(queue, ^{


? ? ? ? NSLog(@"%@",[NSThread currentThread]);

? ? });

先寫到這里,出去買包煙,

//!異步函數(shù)+主隊列不會開啟線程? ?

//同步函數(shù) +主隊列 會產(chǎn)生死鎖

dispatch_sync(dispatch_get_main_queue(), ^{

? ? ? ? NSLog(@"%@",[NSThread currentThread]);

? ? });

? ? dispatch_sync(queue, ^{

? ? ? ? NSLog(@"%@",[NSThread currentThread]);

? ? });

? ? //只會執(zhí)行到這里

? ? NSLog(@"---start---");


? ? dispatch_sync(queue, ^{


? ? ? ? NSLog(@"%@",[NSThread currentThread]);

? ? });


? ? //這里不會執(zhí)行

?? ? NSLog(@"---start---");

//怎么才能不讓產(chǎn)生死鎖呢,可以將同步+主隊列這個方法 放到一個其他線程中去執(zhí)行

比如:[NSThread detachNewThreadSelector:@selector(syncMain) toTarget:self withObject:nil];?

//開一個線程?

- (void)syncMain{

//在這里執(zhí)行 ,就不會產(chǎn)生死鎖了

}

?//GCD 實現(xiàn)線程間的通信 舉例:下載圖片


? //GCD 實現(xiàn)線程間的通信 舉例:下載圖片

? ? dispatch_async(dispatch_get_global_queue(0, 0), ^{

? ? ? ? NSURL *url = [NSURL URLWithString:@"http://a.hiphotos.baidu.com/image/h%3D300/sign=c43e07f052df8db1a32e7a643922dddb/0ff41bd5ad6eddc4c984b29335dbb6fd52663372.jpg"];

? ? ? ? //轉(zhuǎn)換二進制

? ? ? ? NSData*data = [NSDatadataWithContentsOfURL:url];

? ? ? ? //轉(zhuǎn)換圖片

? ? ? ? UIImage*image = [UIImageimageWithData:data];


? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{

? ? ? ? ? ? //刷新UI

? ? ? ? ? ? self.imageView.image= [UIImageimageNamed:image];

? ? ? ? });

? ? });

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容