塊代碼編程---聲明和創建塊代碼

聲明一個塊代碼的引用

塊代碼變量用來保存到塊代碼的引用。使用和聲明函數指針相識的語法聲明塊代碼變量,只是把其中的*換成佔位符^。塊代碼類型基本上都是C語言的格式。下面就是一些有效的塊代碼變量聲明:

void (^blockReturningVoidWithVoidArgument)(void);
int (^blockReturningIntWithIntAndCharArguments)(int, char);
void (^arrayOfTenBlocksReturningVoidWithIntArgument[10])(int);

塊代碼同樣支持可變參數列表。沒有參數的塊代碼必須在參數列表中使用void。

塊代碼在傳入參數,返回值等方面使用元數據驗證,在設計上達到數據安全的目的。你可以把一個塊代碼的引用轉換成一個任何類型的指針,反之亦然。但是你不能通過一個指針引用來對一個塊代碼引用進行解引用--因爲在編譯時期不能計算塊代碼所佔大小。

你可以創建塊代碼的類型--只是你在多個地方創建同一種類型的塊代碼的最好的方式:

typedef float (^MyBlockType)(float, float);
 
MyBlockType myFirstBlock = // ... ;
MyBlockType mySecondBlock = // ... ;

創建塊代碼

使用^標示一個塊代碼的開始。可能後面跟着使用一對小括號括起來的參數列表。塊代碼的代碼部分是在一對大括號裏面。下面是一個塊代碼定義的示例,並把這個塊代碼賦值給一個前面聲明的塊代碼變量--和C語言一樣,塊代碼使用一個分號;作爲定義的結束:

int (^oneFrom)(int);
 
oneFrom = ^(int anInt) {
    return anInt - 1;
};

如果你在塊代碼定義中沒有標示返回值類型,返回值類型會被通過塊代碼的內容推斷出來,如果這個返回值是推斷出來的,並且參數列表是void,你可以省略這個void。如果多個return語句出現,他們必須返回完全相同類型的值(合適的時候必須使用轉換)。

全局塊代碼

在文件作用域內,你可以定義一個塊代碼具有全局可用的:

#import <stdio.h>
 
int GlobalInt = 0;
int (^getGlobalInt)(void) = ^{ return GlobalInt; };
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章