block

概述

      苹果在ios4.0版本开始支持block。对于不同编程北京的人来说,对block的理解也不尽相同。c语言擅长者,可以把block理解成函数指针。通俗讲,可以把block理解成为一个内部函数。如下:

function outerFn()
{
    function innerFn()
    {
        /*在这里添加代码*/
    }
}

       在objective-c编程中,block被看成对象,它封装了一段代码,这段代码可以在任何时候执行。block可以作为函数参数,也可以作为函数的返回值,block本身又可以带参数或返回值。

       block是一个代码块,一般用于函数的回调。block有两大特点:

  1. block本身是一个对象。既然是对象,就应该遵循对象的用法。block声明的函数,可以立即执行,也可以过一段时间再执行。所谓过一段时间,就是函数的回调,或者说是异步执行,只有满足某一个触发条件才执行。
  2. block的某一部分功能类似于delegate。如果实现同一个功能,block编写的代码比delegate要简洁、紧凑,只需要写在同一个文件即可,而不像delegate那样分散在多个文件中。

block的声明、实现与调用

block的声明

block的声明格式如下:

ReturnType (^blockName)(Parameters)
  • "^"的出现,代表它所声明的对象是一个block
  • ReturnType:返回类型可以是OC所支持的任何数据类型,可以实void
  • ^blockName:block名称。
/*示例*/
int (^firstBlock)(NSString *param1, int param2);
void (^showName)(NSString *myName);
NSDate *(^whatDayIsIt)(void);
void (^allVoid)(void);
NSString *(^composeName)(NSString *firstName, NSString *lastName);
/*简化参数名*/
int (^firstBlock)(NSString *, int);
void (^showName)(NSString *);
NSDate *(^whatDayIsIt)(void);
void (^allVoid)(void);
NSString *(^composeName)(NSString *, NSString *);

block的实现

       声明一个block,只是给出了block存在的形式,至于这个block具体能做什么,则取决于它的实现。从逻辑上讲,先声明一个block,再实现它。实现样式如下:

^(Paramters){
    /*block body*/
    return ReturnValue;
};
  1. 没有出现blockName,这就是说,在block实现中,不用blockName
  2. 传递参数的名称是必须的,因为参数必然被调用,仅仅靠参数类型是无法被调用的。
  3. 以分号结尾。
  4. 在block body中,完成一系列操作后,返回一个result(对象),并把这个result赋值给block Name
  5. 回调函数的处理。应用场景是:当满足的条件触发后,开始调用并执行这个函数,如网络数据请求。
/*示例*/
^(int a, int b){
    int result = a * b;
    return result;
};
/*示例*/
int (^howMany)(int, int) = ^(int a, int b){
    return a + b;
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值