您的位置:首页 > 其它

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: