一、block语法
1、Block定义:
block:块语法,本质上是匿名函数。与函数指针很相似:int(*)(int x,int y)
int (^myblock)(int) = ^(int num){return num * 7;};
具体详解:
Block类型:int(^)(int)
Block变量:myblock
Block的值:^int (int num){return num * 7;}即:^返回值类型(参数列表){函数体},其中返回值类型可以省略
int :myblock是块对象,返整型值
(^myblock): ^符号将myblock声明为一个块对象
(int): 它有一个参数,参数的类型也是整型值
^(int num): 参数的名称是num
{}: {}内是块对象的主体部分(具体的块语法实现内容)
^(int num){return num * 7;}: 这是定义块对象昂的语法结构,这部分就是赋值给myblock变量的值。
2、block语法的使用:
int num = 1;
int (^block1)(int x, int y) = ^(int x, int y){
return x + y;
};
int a = block1(1, 5);
Block进行typedef:
typedef int(^BlockType) (int x, int y);
原类型: int(^)(int x, int y)
新类型: BlockType
上面block1的新写法:
BlockType block1 = ^(int x, int y){
return x + y;
};
Block与局部变量:
block内部不能修改局部变量,可以访问局部变量。eg:num
__block 修饰后,在block内部可以改变局部变量(MRC和ARC中均可)eg: _block int num = 1;
__weak 修饰后, 也可以起到相同的作用(用于ARC中)
Block与全局变量:
在block块语法中可以访问全局变量,并且可以修改全局变量
3、block实现数组排序
二、我对block的理解:
虽然我倒现在还是很少使用block, 不过我觉得block的作用就是帮助我们, 保存一个方法, 在特定的时候去使用它, 使用block的时候, 一定要注意循环引用!!!