Block封裝了一段代碼,能夠在任什麼時候候執行多線程
Block能夠做爲函數參數或者函數的返回值,而其自己又能夠帶輸入參數或返回值。異步
蘋果官方建議儘可能多用block。在多線程、異步任務、集合遍歷、集合排序、動畫轉場用的不少函數
1、Blocks的定義:動畫
int (^MySum)(int, int) = ^(int a, int b) {spa
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;
2、定義函數指針
int (*myFn)();
定義Blocks
int (^MyBlocks)(int,int);
調用函數指針
(*myFn)(10, 20);
調用Blocks
MyBlocks(10, 20);
3、在聲明的同時定義變量,而後賦值
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;
};