Blocks

1.在需要传递信息的viewcontroller里面声明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 方法块
    }];   // 这样就把第二个界面的对象传递了过了,也就传递了该对象的所有属性


1.什么是block
是C level的语法以及运行时的一个特性,基于C语言。节省代码,运行效率快。
保存在堆里,也遵循内存管理规则
语法规则:int (^ BFunc) (int   a)
            返回值类型          参数类型
调用:int  ret=BFunc(100)
关键字:_ _ block:
eg1. :
    void (^myBlock) (void)=NULL;
    myBlock=^(){ NSlog”@我是Block”};//赋值
    myBlock();//调用
eg2:带有返回值
     int (^myBlock)(int a ,int b)=^(int a,int b)
     {
      return a+b;
      };//方法定义
      int c=myBlock(3,4);//传值
      NSlog(@“c=%d”,c);
eg3:
_ _block int  sun=0;
int (^myBlock2)(int a ,int b)=^(int a,int b)
{
   sum=a+b;//会报错,当在BLOCK中要修改值的时候要是用_ _ block,避免野指针
};//分号不能少
myBlock2(6,7);
NSlog(@“%d”,sum);
eg4:
typedef void(^Block1)(void);//用typedef定义
  //调用
  Block1 myblock3= ^int (void)//加不加int 没有关系
{
   NSlog(@“myblock3”);
   return 2;//return 不能忘
};
myblock3();
blokc必须要调用!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值