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