ios 开发-block

来源:互联网 发布:泰坦显卡 知乎 编辑:程序博客网 时间:2024/06/05 20:12


Block变量的声明
Block变量的声明格式为: 返回值类型(^Block名字)(参数列表);// 声明一个无返回值,参数为两个字符串对象,叫做aBlock的Blockvoid(^aBlock)(NSString *x, NSString *y);// 形参变量名称可以省略,只留有变量类型即可void(^aBlock)(NSString *, NSString *);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注: ^被称作”脱字符”

Block变量的赋值
Block变量的赋值格式为: Block变量 = ^(参数列表){函数体};aBlock = ^(NSString *x, NSString *y){    NSLog(@"%@ love %@", x, y);};


1.定义Block变量,就相当于定义了一个函数

(1)在类中,定义一个Block变量,就像定义一个函数;

(2)Block可以定义在方法内部,也可以定义在方法外部;

(3)只有调用Block时候,才会执行其{}体内的代码;

(PS:关于第(2)条,定义在方法外部的Block,其实就是文件级别的全局变量)

本类中的Block就相当于类自己服从某个协议,然后让自己代理自己去做某个事情。


2.__block关键字的使用

在Block的{}体内,是不可以对外面的变量进行更改的,语句前面加上__block关键字即可,

然而这样的情况又是允许的:

 NSMutableArray *array = [[NSMutableArray alloc]init];    void (^blo)() = ^{        [array addObject:@"Obj"];    };

为什么呢,因为我们只是对截获的变量进行了操作,而没有进行赋值,所以对于截获变量,可以进行操作而不可以进行赋值。


Block中不可以对C语言数组进行操作,原因是:~~~不支持。。。。





0 0
原创粉丝点击