返回值是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];
}