美文网首页iOS面试基础知识点
Block由浅入深(1):Block的语法

Block由浅入深(1):Block的语法

作者: LordLamb | 来源:发表于2017-12-06 14:05 被阅读0次

曾经面试过一个iOS开发,让他写一个参数是int返回值是void的Block声明,这位同学思考了一会儿只能很尴尬的说不太会写。相信很多iOS开发者刚刚接触到Block的时候,都会对Block的写法有或多或少的疑惑,本文采用一种比较容易理解的方式介绍Block的声明语法、实现语法和省略语法。只要有C语言基础,相信阅读完本文后就能够很轻松的写出无论多么复杂的Block。

Block的声明语法

Block的语法其实和C函数指针比较类似,比如下面声明一个返回值为int,名字是add,参数是两个int的C函数指针:
int (*add)(int, int);
我们将*修改为^就可以得到一个返回值是int,名字是add,参数是两个int的Block声明:
int (^add)(int, int);

Block的实现语法

Block的实现语法也类似与C函数:

^int (int a, int b) {
    return a + b;
};

C函数:

int add(int a, int b) {
    return a + b;
}

我们可以将Block理解为C语言的匿名函数,与C函数相比,Block去掉了函数名,在返回值前加了^。

Block的省略语法

我们经常看到下面这种形式的写法:

^{ NSLog(@"hello world"); };

这是因为Block的返回值是void或者参数是void的时候,可以省略返回值或者参数,上面的Block相当于:

^void (void) { NSLog(@"hello world"); };

当然下面这种形式的Block也是合法的:

^ (int a) { a++; };
^int { return 0; };

相关文章

  • Block由浅入深(1):Block的语法

    曾经面试过一个iOS开发,让他写一个参数是int返回值是void的Block声明,这位同学思考了一会儿只能很尴尬的...

  • Block

    参考文献 Block本质Block由浅入深(5):三种类型的BlockBlock由浅入深(3):Block捕获局部...

  • 初步多线程(GCD)_1

    1. 常用方法: (1)block定义: -- block语法 a) 声明: ...

  • Block深层剖析(一)

    "Block"这个词既指源代码中的block语法,也指由block语法所生成的“值”。 1.Block的本质 首先...

  • Block理解

    1: 什么是block?1.0: Block的语法1.1: block编译转换结构1.2: block实际结构 2...

  • Hello Block

    //1 block 语法 // Block变量的赋值格式为: Block变量 = ^(参数列表){函数体}; //...

  • Block

    1、Block 2、Block语法 3、Block有哪几种类型 NSStackBlock存储于栈区 block 内...

  • Objective-C的Block实质与实现探究 part-7

    Block存储域 1、全局块出现的2种场景 (1) 记述全局变量的地方有Block语法时 (2)Block语法的表...

  • Block

    Block 1.Block的定义和语法2.Block的本质和分类3.__block的实现原理 Block的定义和语...

  • BLOCK的页面传值

    (1)Block的基础语法: 1>Block的声明 void (^returnBlock)(NSString*te...

网友评论

    本文标题:Block由浅入深(1):Block的语法

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