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