Block(一)

Block(块)是Objective-C语言提供的一个强大的特性。Block提供了一种方式,使用这种方式可以创建一组语句(即代码块),并将这些语句赋予另一个变量,随后就可以调用这个变量。从这方面看,块与函数和方法类似,但除了是可执行代码外,还有与栈内存和堆内存绑定的变量。块就是一个实现的闭包,一个允许访问其常规范围之外变量的函数。此外,一个块实际上就是一个对象:它是NSObject的子类,具有父类的相关属性和特性。

在学习Block的过程中,第一个难点就是Block的语法。

块的语法

1.声明块类型

首先,就是我们怎么去声明一个块类型?

returnType  (^blockName) (parameterType,parameterType,...)

返回值类型        块的名称                      参数类型

 例如:

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        int (^sum)(int num1,int num2);

    }
    return 0;
}

我们先定义一个块,名称为sum,返回值类型为int,两个参数的类型都为int。

很明显,我们要这个sum实现加法功能,那么怎么为这个块添加实现?

2.块常量表达式

^returnType (parameterType,parameterType,...){

        //块语句

}

很明显,块常量表达式以脱字符开头,后跟返回值类型,块的参数封装在括号中。

既然是块常量,我们可以把它赋值给已经定义好的块

sum=^int (int num1,int num2){
            return num1+num2;
        };

我们将这段赋值代码添加后,尝试着调用一下sum看看结果。

 我们调用sum(1,2)并赋值给res,可以看到res的值为3;

3.作为方法参数的块类型

我们经常会用到有些方法的参数为block,那么我们怎么定义这样的一个方法呢?

typedef int (^subtractBlock)(int,int);
@interface Calculate : NSObject

-(int)subtosub:(int)num1 :(int)num2 withBlock:(subtractBlock)block;

@end

在这种情况下,我们先通过typedef语句创建一个类型定义为块类型提供一个名字,之后这个块类型就可以被用作方法的参数类型。

此外,我们可以将一个块的声明和定义组合在一个语句中的,例如

int (^Sum)(int,int)=^int (int num1,int num2){
        return num1+num2;
    };

还有一个值得注意的,就是定义和调用块的表达式组合在一起。

        ^(NSString *user){
            NSLog(@"Greeting!%@",user);
        }(@"Earthing");

通过这一条语句,我们就定义并调用了这个block。最后的输出结果也就是

2021-10-09 01:33:24.229099-0700 block基础[3345:36471] Greeting!Earthing
Program ended with exit code: 0

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值