个性化阅读
专注于IT技术分析

Objective-C代码块block的介绍和用法 – Objective-C开发教程

点击下载

上一章Objective-C开发教程请查看:Objective-C声明、定义函数、调用函数和函数参数

通常一个Objective-C类定义了一系列的数据和相关操作,不过有时可能我们只需要一个简单的操作,并且是快速实现的,OC就提供了这个东西:代码块block。其实就是类似于闭包或lambda表达式,再说的清楚一点就是函数——函数指针。

这样一来,OC的代码块bloc就可以当变量用了(函数指针—函数指针类型),不过又要吐槽,这语法太麻烦了,还不如直接使用函数指针的方式,不过你明白这相当于函数指针比较重要。

OC代码块block声明和定义语法

特别要注意的是,block声明相当于声明一个变量,一个函数指针类型的变量(对照C语言),在C语言中使用声明一个函数指针类型的变量的方式如:

void (*pf)(int, int);

上面的声明中,pf是一个函数指针类型的变量,也就是函数指针,多简洁明了!OC中的代码块block的声明方式如下:

returnType (^blockName)(argumentType);

returnType为返回值类型,blockName为代码块的名称,argumentType为参数类型,可以只写参数类型,也可以带参数的名称。下面是一个示例:

void (^myBlock)(void) = ^{
   NSLog(@"MY BLOCK");
};

注意注意:myBlock是一个代码块,但是它还不是一个函数,它是一个函数变量,函数变量!这意味着如果你只是声明一个变量,那你就要相应提供实现了。因为函数有参数,所以实现block的时候不要忘记带参数了。

直接赋值给block变量可以使用以下的方式:

void (^myBlock)(int, int);
myBlock = ^(int a, int b){
   NSLog(@"a +  b: %d", a + b);
}

// 或者
void (^myBlock)(int, int) = ^(int a, int b){
   NSLog(@"a +  b: %d", a + b);
}

调用block使用以下的方式(也就是函数的调用):

myBlock(7, 3);

使用类型定义的代码块block

其实就是类似C语言中的typedef对函数类型的定义,基本是一样的,声明方式也是类似,如下:

// 类型定义,块类型
typdef void (^MBlock)(int, int);

// 定义变量
MBlock block = ^(int a, int b){
   NSLog(@"a +  b: %d", a + b);
}
// 调用
block();

综上,OC中的代码块block其实就是相当于C语言中的函数指针变量,可作为变量使用,同时可用于调用执行特定逻辑。

block的其中一个作用就是可充当匿名函数(Java中的匿名类,快速传递一个),另外就是作为回调函数,例如HTTP请求,传递一个block作为HTTP请求完成后的处理。

赞(0)
未经允许不得转载:srcmini » Objective-C代码块block的介绍和用法 – Objective-C开发教程

评论 抢沙发

评论前必须登录!