- Block和函數很像,具有如下特性:
- 可以保存代碼
- 有返回值
- 有形參
- 調用方式一樣
- 使用的形式舉例:
1)帶參數的形參
int (^heblock)(int,int) = ^(int a, int b){
return a + b;
};
2)不帶形參的block,如果沒有形參可以省略后面的小括號
void (^myblock)() = ^{
NSLog(@“我的BLOCK”);
};
3)利用typedef定義block類型
typedef int (^myblock)(int, int);
myblcok he = ^(int a, int b){
return a + b;
};
int c = he(19,9); // 將19和9的和賦值給c;
- block訪問外面的變量
- block內部可以訪問外面的變量
- 默認情況下block不能修改外面的局部變量
- 給局部變量加上_block關鍵字,這個局部變量就可以在block內部修改
如: int a = 11; _block int b = 12;
上面的兩個變量a和b只有b能夠在block中被修改!
- 在ARC情況下:(用__weak / 下面的方式修飾)
// 在HHLoginViewController.h定義一個完成block
@property (nonatomic, copy) void(^dosomeComplish)();
HHLoginViewController *loginVC = [[HHLoginViewController alloc] init];
//使用__weak避免循環引用
__weak typeof(self) weakSelf = self;
loginVC.dosomeComplish = ^{
[weakSelf dosome];
};
- 在MRC即非ARC情況下:只能用__block