第二章 Blocks
2.1 Blcock概要
帶有自動(dòng)變量的匿名函數(shù)
2.2 Blocks模式
2.2.1 BLock語法
“^” “返回值” “參數(shù)列表” “表達(dá)式”
返回值和參數(shù)列表可省略
與C語言函數(shù)名對比
a. 沒有函數(shù)名
b. 帶有 “^”
2.2.2 Blocks類型變量
C語言函數(shù)指針
int func(int count) {
return count + 1;
}
int (*funcptr)(int) = &func;
Blocks的聲明
int (^blk)(int);
Block可以作為任何參數(shù)使用钓葫。
int (^blk)(int) = ^(int count){return count +1};
Block類型變量的簡單記述
typedef int (^blk_t)(int);
/*
* 原來的記述方式
* void func (int (^blk)(int))
*/
void func (blk_t blk)
/*
* int (^func()(int))
*/
void func(func()(int))
Block的使用
int resulet = blc(10)
2.2.3 自動(dòng)變量值捕獲
int main() {
int dmy = 256;
int val = 10;
const char *fmt = “val = %d\n”;
void (^blk)(void) = ^{printf(fmt, val);};
val = 2;
fmt = “New formmat val = %d\n”;
return 0;
}
該 block 在執(zhí)行時(shí),字符串指針“val = %d\n”被賦值給自動(dòng)變量 fmt,int值被復(fù)制到自動(dòng)變量 val 中巩螃,因此這些值被保存(即被截獲)藻雪,從而在執(zhí)行塊時(shí)使用跌捆。
2.2.4 __block 說明符
只能保存執(zhí)行 block 語法孕檢的值腋妙,保存后就不能改寫該值湾宙。給該自動(dòng)變量附加 __block 說明符妒御,就能實(shí)現(xiàn)在 block 內(nèi)賦值
2.2.5 截獲的自動(dòng)變量
NSMutableArray 可添加修改刪除元素解愤,不可重新賦值
C語言數(shù)組的截獲沒有在 block 截獲自動(dòng)變量的方法中實(shí)現(xiàn)