返回值是int类型 求两个数的和的block
int (^block)(int, int) = ^int (int a, int b){
return a + b;
};
NSLog(@"%d",block(3,5));
给block起别名
typedef int(^WLBlock)(int a, int b);
用别名申明一个block
WLBlock newBlock = ^int(int a, int b){
return a * b;
};
// 调用
NSLog(@"%d",newBlock(3,5));
block传值
将第二个界面值传到第一个界面
在需要传值界面
// 声明block变量
@property (nonatomic, copy) PassByValue passValueBlock;
// 返回上个界面的方法
- (void)back:(UIBarButtonItem *)barButton{
// 调用block进行传值
self.passValueBlock(@"传值");
[self.navigationController popViewControllerAnimated:YES];
}
在接收值的界面
// 去下个界面的值的方法
SecondViewController *secondVC = [[SecondViewController alloc] init];
secondVC.passValueBlock = ^void(NSString *str){
self.navigationItem.title = str;
};
[self.navigationController pushViewController:secondVC animated:YES];
[secondVC release];
解决block循环引用
// 解决Block循环引用的方法
// 相当于 block块中 引用计数会被加一
// 加上__block修饰后 有一个引用计数减1的操作
// ARC状态下使用__weak
// MRC状态下使用__block
// 需要用__block修饰一下self来解决问题
__block SecondViewController *myself = self;
// block的实现
view.block = ^void(){
[myself.navigationController popViewControllerAnimated:YES]; NSLog(@"我来到了secondVC中");
};
block释放(dealloc方法)
- (void)dealloc{
Block_release(_passValueBlock);
NSLog(@"我是secondVC,我被释放了");
[super dealloc];
}