您的位置:首页 > 其它

block的简单实现和讲解:

2015-08-19 21:38 295 查看
1.block封装了一段代码,可以在任何时候执行。
2.block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值,它和传统的函数指针很类似,但是有区别,block是inline(内联函数)的,并且默认情况下它对局部变量是只读的
3.block很好用并且性能很高,苹果官方建议尽量多的使用block,在多线程,异步任务,集合遍历,集合排序,动画转场用的很多。


4.block: int^sum)
(int ,int); 1
。返回值类型 2block名字
3.
参数:



//定义了一block,这个block返回值是int类型,接收两个int类型的参数。

int (^sum)(int,int) = ^(int a,int b){

return a+b;
};


int demo = sum(20,49);

NSLog(@"%d",demo);

也可以用typedef将block定义为一种数据类型:这样就比较灵活了

typedefint (^Sum) (int ,int );

//此时的sum为Sum的对象。
Sum sum = ^(int a,int b){
returna+b;
};

int count = sum(2,3);
NSLog(@"%d",count);



5.注意:block可以访问外面定义的局部变量。但是不能修改

如果你想要在block修改外面定义的局部变量,那么就对变量进行声明__block (两个下划线);


__blockint num =10;


//此时的sum为Sum的对象。
Sum sum = ^(int a,int b){
returna+b;
num=11;
};

int count = sum(2,3);
NSLog(@"%d",count);


6.block作为监听器使用:(模拟按钮被点击事件);

1.定义一个button类:
2.定义一个block;
3.block的具体实现
4.调用block,


.h文件代码为:

#import<Foundation/Foundation.h>
@classButton;
//定义block;
typedefvoid(^ButtonBlock)(Button *);
@interface Button :NSObject

//为block声明setter和getter方法:
@property (nonatomic,copy)ButtonBlock
block;

-(void)onclick;


@end


block的具体实现代码:

btn.block=^(Button*btn)
{
NSLog(@"%@点击了我
",btn);
};

.m文件:

#import"Button.h"

@implementation Button

-(void)onclick{

_block(self);
}

@end


在main函数中:
Button *btn = [[[Buttonalloc]init]autorelease];
btn.block=^(Button *btn)
{
NSLog(@"%@点击了我
",btn);
};

//模拟按钮被点击了
[btnonclick];



注意:这个代码,先在main函数中实现了block的具体实现,然后再用button类中进行调用,这是属于回调机制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: