iOS 塊

1.塊就是一個實現(xiàn)的閉包(closure),一個允許訪問其常規(guī)范圍之外的變量的函數(shù)。

2.一個Objective-C塊實際上就是一個對象,它是NSObject類的子類,擁有NSObject類的所有相關屬性(如向塊發(fā)送消息)。

塊的語法

1. 聲明塊類型的語法

塊類型由返回值類型和參數(shù)類型列表構成。使用脫字符(^)聲明塊類型的變量。

returnType (^blockName) (parameterType,parameterType,...)

例子:

int (^oneParamBlock)(int);
void (^twoParamsBlock)(int,int);//沒有返回值
void (^twoParamsBlock)(int param1,int param2);//與方法聲明類似,快變量聲明可以含有參數(shù)名稱
int (^noParamsBlock)(void);//沒有參數(shù)

2. 塊類型

通過typedef語句,創(chuàng)建類型定義為塊類型提供別名,起到簡化塊類型變量名稱的作用。

typedef returnType(^name)(arguments);

方法聲明中的塊變量:

typedef int(^AdderBlock)(int);
@interface Atom : NSObject
-(int)process:(int)count withBlock:(AdderBlock)adder;
@end

3. 塊常量表達式

使用塊常量表達式可以定義對塊的引用。

^returnType(參數(shù)類型 參數(shù)名稱,...){//塊代碼}

該表達式開頭的脫字符表名這個表達式是一個塊常量表達式。

例:

//1.塊常量表達式
^int (int a){
return  a + 1;
};
//2.沒有設置返回值類型的塊常量表達式
^ (int a){
    return  a + 1;
};
//3.不帶參數(shù)的塊常量表達式
^ {
    NSLog(@"Hello, World");
};

可以將塊常量賦予塊變量:

int (^myBlock)(int);
myBlock = ^int (int param){
    return param * param;
};

可以將塊聲明和塊定義組合到一條語句中:

int (^myBlock)(int) = ^int (int param){
    return param * param;
};

4. 調用

只有調用塊時,才會執(zhí)行其{}體內的代碼

聲明了塊類型變量并賦予塊常量后,就可以直接調用操作符調用該變量。

int a = myBlock(5);
NSLog(@"a is %d",a);
//打印:a is 25

5. __block

默認情況下,塊常量表達式可以訪問局部變量,但不能修改局部變量。使用__block修飾局部變量,可以修改局部變。

__block int myVar = 10;
void (^intBlock)(int) = ^(int amount){
    myVar += amount;
    NSLog(@"New value = %d",myVar);
};
intBlock(5);

當引用變量的塊被復制到堆存儲區(qū)域時,使用__block修改符的變量也會被復制到堆存儲區(qū)域。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容