Blocks

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值