- block的介紹
Block封裝了一段代碼,可以在任何時候執行
Block可以作爲函數參數或者函數的返回值,而其本身又可以帶輸入參數或返回值。
蘋果官方建議儘量多用block。在多線程、異步任務、集合遍歷、集合排序、動畫轉場用的很多
Blocks的定義:
int (^MySum)(int, int) = ^(int a, int b) {
return a+b;
};
定義了一個叫MySum的blocks對象,它帶有兩個int參數,返回int。等式右邊就是blocks的具體實現
Block可以訪問局部變量,但是不能修改。
int sum = 10;
int (^MyBlock)(int) = ^(int num) {
sum++;//編譯報錯
return num * sum;
};
如果要修改就要加關鍵字:__block
__block int sum = 10;
- block 與函數指針的對比
//定義函數指針
int (*myFn)();
//定義Blocks
int (^MyBlocks)(int,int);
//調用函數指針
(*myFn)(10, 20);
//調用Blocks
MyBlocks(10, 20);
- block的賦值
//在聲明的同時定義變量,然後賦值
int (^MySum)(int,int) = ^(int a,int b) {
return a + b;
};
//也可先用typedef先聲明類型,再定義變量進行賦值
typedef int (^MySum)(int,int);
MySum sum = ^(int a,int b) {
return a + b;
};
參考一下以爲大神總結的關於block的使用注意事項,總結的很好,另外博客上還有附有一些參考網站和工具網站,博客地址如下:
http://www.cnblogs.com/biosli/p/block_usage.html