Block分析

2017/4/11

Block:帶有自動變量(局部變量)的匿名函數(shù)

聲明一個匿名函數(shù)int func(int count);調(diào)用id result = func(10);

雖然可以用指針代替id result = (*funcp)(10);

在int (*funcp)(int) = &func;還是需要知道函數(shù)名來獲取地址

表達(dá)形式^void (int event) {} ^(插入記號,creat)

返回值,參數(shù)列表,表達(dá)式

聲明block變量int (^block)(int);

給block變量賦值int (^blk)(int) = ^void (int count) {操作};

block語法生成的block賦值給變量blk

在函數(shù)參數(shù)中使用block類型的變量void func (int (^blk)(int)) {}

函數(shù)返回值使用block變量int ( ^ func() (int)) {return void ^ (int count) {}}

為了看著不混淆用typedoftypedofint (^blk) (int a)

聲明一個返回值int類型參數(shù)int類型的blk類型的變量

blk類型變量作為參數(shù)void func (blk b)zai

blk類型變量作為返回值blkfunc() {}

在C語言中使用int func(blk b, int a) {return b(a) }

在OC中使用– (void)methordUseBlock: (blk)b a: (int)a {

return b(a) }

intmain() {

inta =10;

void(^myBlock)(void) =void^(){ printf(a) };

a =20;

myBlock();

}

保存的是變量的瞬間值,block外部也無法改變內(nèi)部的值

如果想在內(nèi)部使用(修改)該變量,聲明的時候需要加上__block

intmain() {

__blockinta =10;

void(^myBlock)(void) =void^(){ a = 1; printf(a);};

myBlock();

}

在OC中,

id array = [[NSMutableArrayalloc]init];

void (^blk)(void) = void^{

id obj = [[NSObjectalloc]init];

[array addObject:obj];

};

這種是可以的,因?yàn)榻孬@的是實(shí)例對象的指針,所以,使用對象不會有問題

id array = [[NSMutableArrayalloc]init];

void (^blk)(void) = void^{

array = [[NSMutableArrayalloc]init];

};

這種是需要加__block;

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容