Block

来源:互联网 发布:上海惠灵顿学校知乎 编辑:程序博客网 时间:2024/06/07 03:44

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变量

0 0