block
是2010年WWDC苹果为 Objective-C 提供的一个新特性,它为我们开发提供了便利,比如GCD就大量使用了block
,用来往执行队列中添加任务。书上定义block
是带有自动变量(局部变量)的匿名函数。其实它就是一个闭包,一个引用自动变量的函数,更通俗的说,block
就是一段代码块,用来储存一段代码,在特定的时机执行
Block用途
- 自动变量(局部变量)
- 函数参数
- 静态局部变量
- 静态全局变量
- 全局变量
Block声明与定义
1.没有返回值,没有参数的定义方式
1 |
|
2.有返回值,有参数的定义方式
1 | //返回值类型(^block的名字)(参数类型) = ^(参数类型和参数名) {}; |
3.系统提供了一个定义block的快捷函数inline
1 | // block快捷方式 输入:inline |
4.block的类型
1 | //block有自己的类型,就想@"string"是NSString类型一样 |
Block语法上的省略
block
的标准范式为
^
返回值类型
参数列表
表达式
1 | // 1.例如一个完整的Block |
与C语言指针函数的不同
1 |
|
Block变量的传递
1.如果block访问的变量是局部变量,那么变量是值传递
1 | //block为值传递只有一种情况: |
2.如果是静态变量,那么变量是指针传递
1 | static int a = 3; |
Block值传递
Block
也可以进行值的传递,且一般用于逆向回传,在此处不展开了,后面会针对iOS
几种值传递的类型,做一个系统的总结,随后会附上链接。