Block的基本用法
2015-05-29 10:47
260 查看
lBlock封装了一段代码,可以在任何时候执行
lBlock可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。
l苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多
1> 定义Block变量
返回值 (^名称)(参数类型1, 参数类型2. 参数类型3....) 例:int (^sumBlock)(int, int) =
^(int a, int b){};
l在声明的同时定义变量,然后赋值
int(^MySum)(int,int) = ^(int a,int b) {
return a + b;
};
l也可先用typedef先声明类型,再定义变量进行赋值
typedefint (^MySum)(int,int);
MySumsum = ^(int a,int b) {
return a + b;
};
2>
如何利用block封装代码
^(int a, int b) {
return a - b;
};
^() {
NSLog(@"----------");
};
^ {
NSLog(@"----------");
};
3> block访问外部变量
block内部可以访问外面的变量
默认情况下,block内部不能修改外面的局部变量
给局部变量加上__block关键字,这个局部变量就可以在block内部修改
4> 利用typedef定义block类型
typedef int (^MyBlock)(int, int);
// 以后就可以利用MyBlock这种类型来定义block变量
MyBlock block1;
block1 = ^(int a, int b){
return a + b;
};
5> 没有返回值、没有形参的block
void test()
{
// block用来保存一段代码
// block的标志:^
/*
block跟函数很像:
1.可以保存代码
2.有返回值
3.有形参
4.调用方式一样
*/
//
定义block变量
/*
void (^myblock)() = ^(){
NSLog(@"----------------");
NSLog(@"----------------");
};*/
//
如果block没有形参,可以省略后面的()
void (^myblock)() = ^{
NSLog(@"----------------");
NSLog(@"----------------");
};
//
利用block变量调用block内部的代码
myblock();
myblock();
}
lBlock可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。
l苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多
1> 定义Block变量
返回值 (^名称)(参数类型1, 参数类型2. 参数类型3....) 例:int (^sumBlock)(int, int) =
^(int a, int b){};
l在声明的同时定义变量,然后赋值
int(^MySum)(int,int) = ^(int a,int b) {
return a + b;
};
l也可先用typedef先声明类型,再定义变量进行赋值
typedefint (^MySum)(int,int);
MySumsum = ^(int a,int b) {
return a + b;
};
2>
如何利用block封装代码
^(int a, int b) {
return a - b;
};
^() {
NSLog(@"----------");
};
^ {
NSLog(@"----------");
};
3> block访问外部变量
block内部可以访问外面的变量
默认情况下,block内部不能修改外面的局部变量
给局部变量加上__block关键字,这个局部变量就可以在block内部修改
4> 利用typedef定义block类型
typedef int (^MyBlock)(int, int);
// 以后就可以利用MyBlock这种类型来定义block变量
MyBlock block1;
block1 = ^(int a, int b){
return a + b;
};
5> 没有返回值、没有形参的block
void test()
{
// block用来保存一段代码
// block的标志:^
/*
block跟函数很像:
1.可以保存代码
2.有返回值
3.有形参
4.调用方式一样
*/
//
定义block变量
/*
void (^myblock)() = ^(){
NSLog(@"----------------");
NSLog(@"----------------");
};*/
//
如果block没有形参,可以省略后面的()
void (^myblock)() = ^{
NSLog(@"----------------");
NSLog(@"----------------");
};
//
利用block变量调用block内部的代码
myblock();
myblock();
}
相关文章推荐
- 自定义类似优酷首页的BannerView幻灯片展示
- 简单的WebService实现- cxf
- P124.40
- C#unix时间戳转换
- Android 开发工具类 18_NetWorkUtil
- Windows下Python科学计算开发环境搭建
- 19_利用android提供的HanziToPinyin工具类实现汉字与拼接的转换
- windows 下使用jetty-distribution-9.2.9.v2
- android判断网络是否可用
- Spring注解@Component、@Repository、@Service、@Controller区别
- 使用python在wordpress博客网站添加新文章示例
- .net 发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容
- 静态路由配置2
- MySQL slave_net_timeout参数解决的一个集群问题案例
- HTML5中meta属性的使用详解
- JAVA的StringBuffer类
- 堆、堆栈与数据结构中的堆
- HDOJ 2081 手机短号
- VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
- IOS学习之蓝牙4.0