Blocks

来源:互联网 发布:mac大型单机游戏 编辑:程序博客网 时间:2024/04/30 10:15

Blocks

Ø Block介绍

一、Block是带有自动变量的匿名函数代码块,此代码块可以作为参数传递给其他对象。

二、Block与代理协议的功能一样,都是用于做事件通信的。

三、Block也相当于Objective -C里的一种数据类型,property声明时用copy。

四、回调:block会先执行函数调用语句,接着执行赋值语句,当block获取到数值后在回调block函数调用进行赋值。

五、Block使用了全局变量,会把全局变量所在的对象retain(持有),会产生循环引用。需要把对象设置为弱引用。__block Humanb *temHa = hA(Humanb*hA = [[Humanb allocinit]);

 

Ø Block语法定义

一、Block变量定义:返回值(^变量名)(函数参数...);

void (^ myBlocks)(int);// 可以不传参数,但括号要写。 // typedef:给一个数据类型取别名,newBlock:类型新名,参数列表中最好变量名添加上。typedef void (^ newBlock)(NSString *s);

 

Ø Block变量赋值(Block的实现):变量名 = 返回值^(参数列表){函数代码块....}

myBlock = ^void (int a, int b) {// 可以省略返回值(不包括插入符)。 NSlog(@”c = %d”,a + b);};

 

Ø Block函数的调用

myBlock(10,20);

 

Ø 定义和实现合并

void (^ myBlock2)(int, int) = ^(int a, int b) { /*1. int a局部变量,在block的实现外面不能访问。2. block调用时a变量才分配内存创建出来。3. 外部的局部变量传入block之后,就被转换为常量,值不能修改。4. __block修饰的变量可以在block的外部和内部访问。*/ NSlog(@”myBlock = %d”,a + b);}

 

Ø block作为方法参数,参数类型:void (^)(int)

- (void)methodUsingBlock:(void (^)(int))block;- (void)methodUsingBlock:(newBlock)block;// 通过typedef定义的block类型传参数。 - (void)methodUsingBlock:(newBlock)block {// 实现methodUsingBlock方法 block(@“关羽”,@“张飞”);// 调用block}

 

Ø methodUsingBlock 方法的调用

Person *per = [[Person alloc] init]; [Per methodUsingBlk:^(NSString *name1, NSString *name2) { NSlog(@”%@,和%@”,name1,name2);}];// block的实现(赋值)。

0 0
原创粉丝点击