是写在方法里的,在方法里定义个block,有返回值的,以;结尾,block只有被调用的时候才能执行 {} 里的代码。(如果有同名的优先调局部的)
在类中,定义一个Block变量,就像定义一个函数
代表有(名),(参数),(返回值)。没有参数的无返回值:
-(void)viewDidLoad{
[super viewDidLoad];
void (^printBlock) () = ^(){
//block 内部
NSLog(我再block内部);
};
printBlock ();
}
- 有参数的有返回值:
int (^squer)(int) = ^(int num){
return num*num;
};
NSLog (@"%d",squre(3));
x+y
int x =4;
square(3);
//__block 关键字 修饰 需要在block
__block int x =4;
void (^sum)(int) = ^(int y){
x += y;
NSLog(@"%d",x+y);
};
sum(100);
Block传值
.h 第二个页面
typedef void (^sendValue)(NSString *);
//多个情况下 (NSString *,NSString*);
@property (nonatomic,assign) sedValue sv;
.m 第二个页面
-(IBAction)click:(id)seder{
[self dismissViewControllerAniamted:YES competin:^{
_blockUpdateBtnTitle(@"传值");
//多个 ^{ self.sv(@"传值",@"传值");
}];
}
.m 第一个页面
-(IBAction)jump:(id)sender{
SecondViewController *second = [[SecondViewController alloc] init];
second.sv = ^(NSString * str){
//多个 ^(NSString * str,NSString *name)
self.valueLabel.text = str;
//多个 self.valueLabel.text = [NSString stringWithFormat:@"%@ %@",str,name];
};
[self presentViewController:second animated:YES completion:nil];
}