美文网首页
Block-介绍

Block-介绍

作者: 正直走 | 来源:发表于2017-05-25 15:17 被阅读26次
  • Block简单介绍
    首先Block是iOS中比较特殊的一种数据类型
    Block是苹果官方比较推荐使用的数据类型,应用也比较广泛
    动画、多线程、集合遍历、网络请求回调

  • Block的作用
    Block用来保存一段代码,可以再恰当的时机取出调用,功能类似于函数和方法

  • Block语法
    Block最常见的形式如下

^(int param){
     NSLog(@"%d",param);
};

上面是它的缩写形式,其完整的形式应该如下

^void(int param){
        NSLog(@"%d",param);
};

而C语言最简单的定义带参函数形式如下

void param(int param){
}

可以看出完整形式的Block语法与一般的C语言函数相比仅有两点不同

  • 没有函数名

  • 带有"^"
    其中没有函数名是因为它是匿名函数,而带有“^”是容易辨识查找

  • 简单使用
    没有参数没有返回值,在没有返回值的时候void也是缺省值

void (^block) = ^{
       NSLog(@"%d",param);
  };

有参数和返回值

int (^block)(int) = ^int(int param){
       NSLog(@"%d",param);
       return param *param;
  };```
提示:当有返回值的时候第三个`int`即'^'后面的返回值类型是可以省略的,但在该block当做参数的时候是不可以省略的。如`-(void)collectionfunDic:(void(^)(NSMutableDictionary *resDic))funDic`
如果没有返回值没有参数Block最简单的

- 使用```typedef```定义```Block```类型
typedef 顾名思义,其作用就是定义一种类型,它可以定义枚举,枚举也是相当于定义了一种新的类型,如下例

typedef enum {
HeoroTypeSuperMan,
HeoroTypeSuperGirl
}HeoroType;

该枚举相当于是定义了一种```HeoroType```的类型。
那么block同时也可以定义一种数据类型,
我们以一个返回两个数值相加的block为例子如下

int (^minusBlock)(int, int) = ^(int num1, int num2) {
return num1 - num2;
};

同时再定义一个返回两个block相乘的block

int (^multiBlock)(int, int) = ^(int num1, int num2) {
return num1 * num2;
};

可以看出上面两个```block```在定义时除了变量名,不同其他都相同,那我们如果在定义相加或相除的```block```,那么他们的格式应该也基本一样,所以,我们完全可以用```typedef```将像这种的```block```定义为一种类型,如上面的```block```,我们可以定义成如下格式

typedef int (^MyBlock)(int, int);

那么上面的相减和相乘block就可以分别定义成

MyBlock minusBlock = ^(int num1, int num2) {
return num1 * num2;
};

MyBlock multiBlock = ^(int num1, int num2) {
return num1 * num2;
};

相对于最上面的定义,这样定义block有以下好处
 - 代码精简,
 - 更加直观

 ```代码精简```不必多说,如我们在定义加、减、乘、除的block,只需用MyBlock的block类型后面加上block的变量名就好。```更加直观```,如上相乘的block,MyBlock就是该block的类型,其定义的block变量需要传入两个int类型的参数,并且返回一个int类型的值。就如同```int result = 5;```myBlock就相当于int,multiBlock就相当于result。

相关文章

  • Block-介绍

    Block简单介绍首先Block是iOS中比较特殊的一种数据类型Block是苹果官方比较推荐使用的数据类型,应用也...

  • block-整理中

    block-整理中

  • GCD多线程

    一、概念介绍 -任务:要执行的操作,在GCD中一般为block-队列:用来存放任务,在GCD中成为queue-并发...

  • Block

    block- 三种block__NSGlobalBlock__ NSStackBlock __NSMal...

  • block-类型

    从《block-底层数据结构》中,我们知道block的本质就是就是OC对象,他也有isa指针,它既然是对象,那它是...

  • Block-类型

    类型01 block有3种类型,可以通过调用class方法或者isa指针查看具体类型,最终都是继承自NSBlock...

  • block-循环引用

    block的循环引用,在日常开发中,我们常常遇到,但是可能部分新人还不太了解为何会循环引用,到底是如何循环引用理解...

  • __block-内存管理

    我们创建一个对象如果我们block内部用到了__block类型的变量,他会拥有这个对象,我们可以通过cpp文件来分...

  • 九、Block之(一)Block内部结构及调用本质

    一、Block内部数据结构 1.调用分析 2.关于block调用中 block->FunPrt()的理解 bloc...

  • 2022-04-19 iOS计时器引用解除问题

    我们使用NSTimer的时候,经常发生循环引用 以上代码产生循环引用环,self->timer->block->s...

网友评论

      本文标题:Block-介绍

      本文链接:https://www.haomeiwen.com/subject/etphtxtx.html