你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> IOS開發(101)之程序塊block初窺

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

編輯:關於IOS

1 前言
以前也有介紹過GCD,但是感覺不夠深入,今天我們來重新認識一下這個概念,GCD即Grand Central Dispatch(中文直譯宏偉的中心派遣o(s□t)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 結語
以上是所有內容,希望對大家有所幫助。

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved