block学习笔记——详解和使用
2015-05-28 10:13
441 查看
对象和对象之间的通信方式:
1、代理和协议,一对一的通信;
2、通知,一对多的通信;
3、block闭包,一对一的通信;
block是iOS4.0之后新增的一种语法结构,也称为“闭包(closure)”。
block是一个匿名的函数代码块,此代码块可以作为参数传递给其他对象。
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方式
两种release方式
讲UIButton按钮的点击事件响应方法,改成block。
1、SDK提供的事件绑定
2、block方式
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(@"按钮被点击了"); };
相关文章推荐
- FreeBSD学习笔记12-pureftpd使用详解(1)-安装、配置、实现匿名登录
- FreeBSD学习笔记18-pureftpd使用详解(2)-用shell用户或虚拟用户登录pureftpd
- Unity Application Block 学习笔记之一使用接口
- Unity Application Block 学习笔记之一使用配置文件
- FreeBSD学习笔记28-pureftpd使用详解(3)-Pureftpd的权限控制
- MFC学习笔记之:ListCtrl控件使用详解
- 学习笔记 SVN简易使用手册详解
- 学习笔记:UINavigationController使用详解
- 学习笔记:UITabBarController使用详解
- 学习笔记:Tab Bar 控件使用详解
- entlib 5.0学习笔记 caching application block 3 详细配置及api使用
- entlib 5.0学习笔记 caching application block 3 详细配置及api使用
- MFC学习笔记之:ListCtrl控件使用详解
- 树莓派学习笔记——wiringPi I2C设备使用详解
- python学习笔记:字典的使用示例详解
- python学习笔记:字典的使用示例详解
- IOS 学习笔记 —— tableView 使用详解(二)
- IOS 学习笔记 —— AFNetworking 2.0 使用详解(一)
- C++学习笔记(七):string类用法及使用大全——在C++11下的使用详解
- ios 学习笔记 —— NSDate 使用详解(一)