IOS開發(101)之程式塊block初窺

來源:互聯網
上載者:User

1 前言
以前也有介紹過GCD,但是感覺不夠深入,今天我們來重新認識一下這個概念,GCD即Grand Central Dispatch(中文直譯宏偉的中心派遣o(╯□╰)o)。它的一個重要概念是隊列。系統提供了許多預定義的隊列,包括可以保證始終在主席那成上執行其工作的隊列。

2 詳述
GCD嚴格遵循FIFO(先進先出)原則。添加到GCD隊列的工作始終按照這個排入佇列的順序啟動。儘管如此,他們不會總是按照相同的順序完成,因為如果可能,GCD隊列將自動在多個線程之間分配它的工作。

我們可以將將GCD理解為一個線程池。

跟GCD相關的是一種成為程式塊的語言功能,這是向C語言本身添加的一些新文法。這對於充分的利用GCD非常重要。程式塊背後的理念是像任何其他C語言類型一樣的對待特定的代碼塊。程式塊可以分配給一個變數,以參數的形式傳遞給函數或者方法。當然也可以執行。通過這種方式,程式塊可用作Objective-C中的委託模式或者C中的回呼函數的代替路徑。

程式塊非常類似於方法或者函數,程式塊可以接受一個或者多個參數並指定一個傳回值。要聲明程式塊變數,可以使用“^”符號以及其他一些放在圓括弧內的代碼來聲明參數和傳回型別。要定義程式塊本身,執行的操作大體相同,但在後面會添加定義程式塊的實際代碼,包含在花括弧內。例子:

//聲明一個沒有參數和傳回值的block變數 叫做loggerBlock

void(^loggerBlock)(void);

//執行個體化這個block

loggerBlock = ^{NSLog(@“I'm just glad they didn't call it a bug”);};

//執行這個block,就像調用函數一樣

loggerBlock();

如果想要block中能修改外部的變數,需要在聲明變數之前添加儲存修飾符__block,進行外部變數“讀/寫”。、注意block前面有兩條底線,而不是一條.

//定義一個可以改變的塊變數

__block int a = 0;

//定義一個快修改a變數

void(^sillyBlock)(void) = ^{a = 47;};

//在調用塊之前檢查a變數

NSLog(@"a ==%d",a);//outputs "a==0"

//執行塊

sillyBlock();

//調用之後檢查a的值

NSLog(@"a==%d",a);//outputs “a==47”

 


3 結語
以上是所有內容,希望對大家有所協助。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.