您的位置:首页 > 其它

block学习笔记——详解和使用

2015-05-28 10:13 441 查看
对象和对象之间的通信方式:

1、代理和协议,一对一的通信;

2、通知,一对多的通信;

3、block闭包,一对一的通信;

block是iOS4.0之后新增的一种语法结构,也称为“闭包(closure)”。

block是一个匿名的函数代码块,此代码块可以作为参数传递给其他对象。

//定义block的实现
[self objectMethod:^(int a,int b){
NSLog(@"这是回调的block函数");
return a+b;
}];

-(void)objectMethod:(int (^)(int,int))block{
//调用block块
block(10,20)
}


block 声明、创建。调用



block 类型



block 参数



block 引用局部变量时,该变量会作为常量编码到block块中。

局部变量需要使用__block修饰,才能在block中修改。

如:



[b]*block 内存管理*[/b]

在block里面引用一个局部的OC对象的时候,该对象会被retain。

如果局部变量使用__block修饰,则不会被retain。

如:



在block里面引用一个实例变量时,该实例对象会被retain。

这样容易导致循环引用。所以要对当前实例对象用_block来修饰。



block 本身可以像对象一样copy和release。

block创建后内存是分配在栈上,调用copy方法,会将block从栈移到堆上。

当block声明为全局变量时,我们应该调用block的copy方法。

两种copy方式

[_block copy];
Block_copy(_block);


两种release方式

[_block release];
Block_release(_block);


讲UIButton按钮的点击事件响应方法,改成block。

1、SDK提供的事件绑定

[button addTarget:self action:@selector(clickAction:)forControlEvents:UIControlEventTouchUpInside];


2、block方式

button.touchBlock=^(UIButton *button){
NSLog(@"按钮被点击了");
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: