Block

Blocks定义:

是OC中的一种数据类型,在iOS开发中被广泛应用,^是其特有的标志,实现代码包含在{}之间,大多数情况下,以内联inline函数的方式被定义和使用,Block与C语言的函数指针有些相似,但使用起来更加灵活

1.格式:返回类型(^块名称)(参数类型)=^(参数列表){代码实现};
如果没有参数,等号后面参数列表的()可以省略

2.示例:
int(^sumBlock)(int ,int)=^(int x,int y){
return x + y ;
};

3.Block可以使用在定义之前声明的局部变量
1.在定义Block时,会在Block中建立当前局部变量内容的副本(拷贝)
2.后续再对该变量的数值进行修改,不会影响Block中的数值
3.如果需要在block中保持局部变量的数值变化,需要使用__block关键字
4.使用__block关键字后,同样可以在block中修改该变量的数值

4.block可以被当做参数直接传递

    遍历并打印数组中的内容,当obj为”王五”时停止遍历

  NSArray* array=@[@“张三”,@“李四”,@“王五”,@“赵六”];
  [array  enumerateObjectsUsingBlock:^(id  obj,NSUInteger  idx,BOOL *  stop){

         NSLog(@“第%d项内容是:%@”,(int)idx,obj);
         if([@“王五” isEqualToString:obj])
                 {
                       *stop=YES;
                  }

}]

5.对象传递进block的方式(为保证Block中的代码正常运行,在将stopName的指针传递给Block时,Block会自动对stopName的指针做强引用)

             NSString*  stopName=@“孙七”;

                     if([stopName  isEqualToString: obj] ||  idx == stopIndex)//stopName的指针在Block中被自动添加为强引用,直至block结束
                    {
                             *stop=YES;
                    }

6.可以使用typedef定义一个Block的类型,便于在后续直接使用

typedef double(^myBlock)(double x,double y);

   myBlock  area=^(double  a,double  b){
    return   x*y;

}
typedef是关键字用于定义类型,myBlock是定义的block类型
area是myBlock类型的Block变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值