Blocks 语法 实现传值
在需要传递信息的ViewController里边声明blocks变量。
如下:
void (^blocks) (int flag, NSString * string); // 变量名为blocks ,, 后边的两个变量为需要传递的信息
void (^blocks2) (SecendViewController * sec); // 变量名为blocks2
并添加一个 -(void) setBookName :(void (^) (SecendViewController * sec))name; 方法
void (^) (SecendViewController * sec)我理解的是可以当做一个一般的类型,比如NSString来看待
在.m文件里边
-(void) setBookName :(void (^) (SecendViewController * sec))name
{
[blocks2 release]; // 这里边也是符合内存管理的
blocks2 = [name copy];
}
在需要推出次界面的的方法里边:
if (blocks2) {
blocks2(self); // 我理解的是就如同一个普通的函数一样,在此时去回调blocks2也就是上边name的方法块(方法块在需要接受信息的controller里边)
}
在接收的ViewController里边,可以再推进到第二个界面的时候用创建的对象去调用setBookName :方法
SecendViewController * secendVC = [[SecendViewController alloc]init];
[secendVC setBookName:^(SecendViewController *sec) {
// name 方法块
}]; // 这样就把第二个界面的对象传递了过了,也就传递了该对象的所有属性。