block是封裝了函數(shù)及執(zhí)行上下文環(huán)境的對(duì)象。
block聲明及使用語法
block本質(zhì)是一個(gè)對(duì)象,那么我們肯定可以聲明block類型
typedef 返回類型(^Block類型名稱)(參數(shù)類型列表...);
//舉例
typedef int(^BlockType)(int, int);
//聲明一個(gè)block變量
BlockType block1;
直接聲明一個(gè)block變量(不通過類型)
返回值類型 (^blockName)(參數(shù)類型列表...);
//舉例
int (^block3)(int, int);
定義block的實(shí)現(xiàn)
^ 返回值 (參數(shù)列表...){
//block內(nèi)部功能實(shí)現(xiàn)
};
其中,返回值可以省略,如果參數(shù)列表為空,那么參數(shù)列表也可以省略。
^ (參數(shù)列表){
//block內(nèi)部功能實(shí)現(xiàn)
};
^ {
//block內(nèi)部功能實(shí)現(xiàn)
};
#pragma makr - 簡(jiǎn)寫
//完整寫法
^int (int a, int b) {
if ( a >= b ) {
return a;
} else {
return b;
}
};
// 省略返回值
^(int a, int b) {
if ( a >= b ) {
return a;
} else {
return b;
}
};
// 省略返回值及參數(shù)
^ {
NSLog(@"block");
};
block作為參數(shù)類型
- (void)paramBlock:(int (^)(int, int))block {
if (block) {
block(4, 6);
}
}
block作為函數(shù)返回值
- (int(^)(int, int))returnBlock {
int (^maxBlock) (int , int) = ^(int a, int b) {
if ( a >= b ) {
return a;
} else {
return b;
}
};
return maxBlock;
}
如何理解并記憶block類型及block實(shí)現(xiàn)的語法呢?
block的定義,采用的是返回值 (^)(參數(shù)類型列表...)的樣式,這個(gè)是不是和函數(shù)指針(返回值 (*函數(shù)指針)(參數(shù)列表類型...))的定義超級(jí)像呢?
block的實(shí)現(xiàn),采用的是^ 返回值 (參數(shù)類型列表){ }的樣式。