gcd,block,dispatch queue

今天稍稍用到了ios裏面的多線程,看了一下相關的知識,文章和代碼,感覺真的相當有用。

當一個app正在使用,有時候需要碰到大運算量的任務。假如這個任務是在主線程進行,那麼用戶不得不等待該任務完成再進行下一個動作。這時候,用戶第一個想做的實情,就是關掉app。。。。

於是,一個叫做multithreading的技術不得不出生。。。(成語是 應運而生?)
有一篇英文的文章,講的相當通俗易懂,只要不是英語渣渣,看一下絕對有益。。

http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial

應用多線程的話,大計算量的任務就會離開主線程,在不影響用戶的後臺(某個其他線程)進行,然後用戶就會很爽,開發者也很爽,大家都很爽。。。

貼一段代碼:

dispatch_queue_t queue=dispatch_queue_create("Doing Sth ",NULL);

    dispatch_async

(queue,        ^(void){   [SomeObject DoSomething];

                    [SomeObject DoOtherSomething];

  });

這裏面就濃縮了三個東西的用法,是最常見的多線程處理某些方法(函數)的代碼塊。

首先dispatch_queue_t聲明瞭一個對象queue,利用dispatch_queue_create來初始化。對了,注意要添加頭文件。。

然後就是dispatch_async(),在這個方法裏面寫需要實現的代碼,注意是要serial的實現,就是最傳統的那種面向過程的方法,畢竟是queue,講究先進先出。。

最後有個叫做block的語法,就是那個 ^(void){}的塊。。姑且理解爲一塊東西,可以當做一個整體使用(所以叫做block?)比如當做一個參數傳入其他方法,等等。

這個東東真心好用而且必要,我還要繼續探索探索。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章