Block封裝了一段代碼,能夠在任什麼時候候執行多線程
Block能夠做爲函數參數或者函數的返回值,而其自己又能夠帶輸入參數或返回值。它和傳統的函數指針很相似,可是有區別:異步
block是inling(內聯函數)的,而且默認狀況下它對局部變量是隻讀的函數
蘋果官方建議儘可能多用block,在多線程、異步任務、集合遍歷、集合排序、動畫轉場用的不少。動畫
1、block能夠訪問外面定義的局部變量。若是外部的變量用了__block關鍵字進行了聲明,就能夠在block內部修改這個變量。不然不能修改。spa
void test2() {線程
//__block有兩個下劃線。指針
__block int c = 20;排序
//聲明瞭一個block變量。test
MySum sum = ^(int a, int b) {變量
//若是外部的變量用了__block關鍵字進行了聲明,就能夠在block內部修改這個變量。不然不能修改。
c = 29;
//block能夠訪問外面定義的局部變量。
NSLog(@"%i",c);
return a + b;
};
NSLog(@"%i",sum(1,2));
}