黑马程序员技术交流社区
标题:
block的基本使用
[打印本页]
作者:
杨光0618
时间:
2016-8-27 00:19
标题:
block的基本使用
1.block是一个数据类型
存储一段代码
但不是任意的代码都可以存储
声明block类型变量的时候,必须要指定这个block变量中可以存储的代码的参数和返回值,一旦指定,这个block类型只能存储这样的代码段,别的格式的代码段是无法存储
block类型的声明
void(^myBlock)();
代表声明了一个block类型的变量,变量名叫做myBlock
这个变量中只能存储没有返回值也没有参数的一段代码
int(^myBlock1)(int num1,int num2);
代表声明一个block类型的变量,变量名叫做myBlock1
这个变量中只能存储int返回值类型,参数为两个int类型的代码
block变量的赋值
^myBlock = ^void()
{
NSLog(@"Hasakei!");
};
代表创建了一段block类型的代码,代码中存储是 NSLog(@"Hasakei!”);这段代码
也可以写在一起
block简写方式
若block的代码段没有参数
那么代码段前的参数小括号可以省略
^void
{
NSLog(@"laugh out loud");
};
void后的()可以省略
如果代码段没有返回值,那么代码段前的返回值类型void也可以省略
^{
NSLog(@"laugh out loud");
};
即^后的返回值类型和参数的小括号都可以省略
在声明block变量时,如果要求存储的代码有参数,这时参数的名字可以省略,只写类型
int(^myBlock2)(int,int);
typedef将一个长的block类型定义为一个短类型
语法
typedef 返回值类型 (^新类型名称)(参数列表)
e.g. typedef int (^nice)(int a,int b,int c); == int(^nice)(int a,int b,int c);
直接使用^nice就可以定义新block代码段了
2.在block代码块的内部可以取出外部的全局变量和局部变量的值
在block代码块的内部可以定义一个和外部变量名称相同的变量,就近原则
在block代码块的内部,可以访问全局变量和局部变量,可以修改全局变量的值,但是不能修改局部变量的值
若非要修改局部变量的值,那么在局部变量前需要使用__block修饰
3.block的用途
block作为函数的参数
只需要在函数的小括号当中写上一个block类型的参数即可
void saiHi(void (^myBlock)());
如何调用带有block参数的函数
可以先将要传递的block代码段存储到一个block变量中去
然后通过函数调用时参数加入相应的变量即可
也可以在函数调用时直接填写上block类型的代码段
作者:
JFPURE
时间:
2016-8-27 12:44
{:5_237:Hasakei,面对疾风吧!
作者:
1358840521
时间:
2016-8-27 18:15
六六六,学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2