ios多線程之GCD

來源:互聯網
上載者:User

標籤:

  1 @implementation HMViewController  2   3 - (void)viewDidLoad  4 {  5     [super viewDidLoad];  6       7     [self performSelectorInBackground:@selector(test) withObject:nil];  8       9 //    [self syncMainQueue]; 10 } 11  12 - (void)test 13 { 14     NSLog(@"test --- %@", [NSThread currentThread]); 15      16     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 17         NSLog(@"任務 --- %@", [NSThread currentThread]); 18     }); 19 } 20  21 /** 22  * 使用dispatch_async非同步函數, 在主線程中往主隊列中新增工作 23  */ 24 - (void)asyncMainQueue 25 { 26     // 1.獲得主隊列 27     dispatch_queue_t queue = dispatch_get_main_queue(); 28      29     // 2.新增工作到隊列中 執行 30     dispatch_async(queue, ^{ 31         NSLog(@"----下載圖片1-----%@", [NSThread currentThread]); 32     }); 33 } 34  35 /** 36  * 使用dispatch_sync同步函數, 在主線程中往主隊列中新增工作 : 任務無法往下執行 37  */ 38 - (void)syncMainQueue 39 { 40     // 1.獲得主隊列 41     dispatch_queue_t queue = dispatch_get_main_queue(); 42      43     // 2.新增工作到隊列中 執行 44     dispatch_sync(queue, ^{ 45         NSLog(@"----下載圖片1-----%@", [NSThread currentThread]); 46     }); 47 //    dispatch_sync(queue, ^{ 48 //        NSLog(@"----下載圖片2-----%@", [NSThread currentThread]); 49 //    }); 50 //    dispatch_sync(queue, ^{ 51 //        NSLog(@"----下載圖片3-----%@", [NSThread currentThread]); 52 //    }); 53      54     // 不會開啟新的線程, 所有任務在主線程中執行 55 } 56  57 // 凡是函數名種帶有create\copy\new\retain等字眼, 都需要在不需要使用這個資料的時候進行release 58 // GCD的資料類型在ARC環境下不需要再做release 59 // CF(Core Foundation)的資料類型在ARC環境下還是需要再做release 60  61 /** 62  * 用dispatch_sync同步函數往串列列中新增工作 63  */ 64 - (void)syncSerialQueue 65 { 66     // 1.建立串列隊列 67     dispatch_queue_t queue = dispatch_queue_create("com.itheima.queue", NULL); 68      69     // 2.新增工作到隊列中 執行 70     dispatch_sync(queue, ^{ 71         NSLog(@"----下載圖片1-----%@", [NSThread currentThread]); 72     }); 73     dispatch_sync(queue, ^{ 74         NSLog(@"----下載圖片2-----%@", [NSThread currentThread]); 75     }); 76     dispatch_sync(queue, ^{ 77         NSLog(@"----下載圖片3-----%@", [NSThread currentThread]); 78     }); 79      80     // 3.釋放資源 81 //    dispatch_release(queue);   // MRC(非ARC) 82      83     // 總結: 不會開啟新的線程 84 } 85  86 /** 87  * 用dispatch_sync同步函數往並發隊列中新增工作 88  */ 89 - (void)syncGlobalQueue 90 { 91     // 1.獲得全域的並發隊列 92     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 93      94     // 2.新增工作到隊列中 執行 95     dispatch_sync(queue, ^{ 96         NSLog(@"----下載圖片1-----%@", [NSThread currentThread]); 97     }); 98     dispatch_sync(queue, ^{ 99         NSLog(@"----下載圖片2-----%@", [NSThread currentThread]);100     });101     dispatch_sync(queue, ^{102         NSLog(@"----下載圖片3-----%@", [NSThread currentThread]);103     });104     105     // 總結: 不會開啟新的線程, 並發隊列失去了並發的功能106 }107 108 /**109  * 用dispatch_async非同步函數往串列隊列中新增工作110  */111 - (void)asyncSerialQueue112 {113     // 1.建立串列隊列114     dispatch_queue_t queue = dispatch_queue_create("com.itheima.queue", NULL);115     116     // 2.新增工作到隊列中 執行117     dispatch_async(queue, ^{118         NSLog(@"----下載圖片1-----%@", [NSThread currentThread]);119     });120     dispatch_async(queue, ^{121         NSLog(@"----下載圖片2-----%@", [NSThread currentThread]);122     });123     dispatch_async(queue, ^{124         NSLog(@"----下載圖片3-----%@", [NSThread currentThread]);125     });126     127     // 總結: 只開1個線程執行任務128 }129 130 /**131  * 用dispatch_async非同步函數往並發隊列中新增工作132  */133 - (void)asyncGlobalQueue134 {135     // 1.獲得全域的並發隊列136     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);137     138     // 2.新增工作到隊列中 執行139     dispatch_async(queue, ^{140         NSLog(@"----下載圖片1-----%@", [NSThread currentThread]);141     });142     dispatch_async(queue, ^{143         NSLog(@"----下載圖片2-----%@", [NSThread currentThread]);144     });145     dispatch_async(queue, ^{146         NSLog(@"----下載圖片3-----%@", [NSThread currentThread]);147     });148     149     // 總結: 同時開啟了3個線程150 }151 152 @end

 

ios多線程之GCD

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.