iOS block初解
阿新 • • 發佈:2018-06-13
外部 通過 oid 利用 封裝 lock 代碼塊 類型 ret
相信大家都明白 block
的重要性是毋庸置疑的,它本身封裝了一段代碼並將這段代碼當做變量,通過 block()
的方式進行回調。block的這種機制和 函數指針
非常像。而我的理解即是: block 就相當於是 有返回類型
的 代碼塊
。
一、定義block
返回類型 (^block類型名稱) (block形參):
void (^myBlock)() = ^(){ NSLog(@"---這是一個block---"); }; int (^sumBlock)(int, int) = ^(int a, int b) { return a + b; }; 就等同於: int a = 10; 的形式 拆開寫: void (^ block)(); block = ^{ NSLog(@"---這也是一個block---"); }; 對比函數: int sum(int a, int b) { return a + b; }
二、調用block
int c = sumBlock(10,10);
三、block訪問外部變量
block內部可以訪問外面的變量
int a = 10; void (^ block)(); block = ^{ NSLog(@"a=%d",a); };
默認情況下,block內部不能修改外面的局部變量
int a = 10; void (^ block)(); block = ^{ a = 20; }; //這是錯誤的
給局部變量加上
__block
關鍵字,這個局部變量就可以在block內部修改__block int a = 10; void (^ block)(); block = ^{ a = 20; };
四、利用typedef定義block類型
typedef int (^myBlock)(int, int);
myBlock block = ^(int a, int b) {
return a + b;
};
拆開寫:
typedef int (^myBlock)(int, int);
myBlock block;
block = ^(int a, int b) {
return a + b;
};
iOS block初解