脫字符(^)是塊的語(yǔ)法標(biāo)記。按照我們熟悉的參數(shù)語(yǔ)法規(guī)約所定義的返回值以及塊的主體(也就是可以執(zhí)行的代碼)。下圖是如何把塊變量賦值給一個(gè)變量的語(yǔ)法講解:
按照調(diào)用函數(shù)的方式調(diào)用塊對(duì)象變量就可以了:int result = myBlock(4); // result是 28
"abc 05",
"abc 1",
"abc 12",
"abc 13",
"abc 21"
)
代碼塊想要遞歸調(diào)用,代碼塊變量必須是全局變量或者是靜態(tài)變量,這樣在程序啟動(dòng)的時(shí)候代碼塊變量就初始化了,可以遞歸調(diào)用
[cpp] view plaincopystatic void (^ const blocks)(int) = ^(int i) { if (i > 0) { NSLog(@"num:%d", i); blocks(i - 1); } }; blocks(3); 運(yùn)行打印結(jié)果:num:3
num:2
num:1
運(yùn)行打印結(jié)果:
global:1001
global:1001
而局部變量可以使用,但是不能改變。[cpp] view plaincopyint local = 500; void(^block)(void) = ^(void) { local++; NSLog(@"local:%d", local); }; block(); NSLog(@"local:%d", local); 在代碼塊中改變局部變量編譯不通過。怎么在代碼塊中改變局部變量呢?在局部變量前面加上關(guān)鍵字:__block[cpp] view plaincopy__block int local = 500; void(^block)(void) = ^(void) { local++; NSLog(@"local:%d", local); }; block(); NSLog(@"local:%d", local); 運(yùn)行結(jié)果:local:501local:501
轉(zhuǎn)載:http://blog.csdn.net/totogo2010/
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注