------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1.介绍
1.block封装了一段代码,可以在任何时候执行。学过java的朋友会觉得这个很像java的匿名函数,js的闭包
。
// 如何定义block变量
int (^sumBlock)(int, int);
2.block可以作为函数参数或者是函数的返回值,block本身也可以带参数和返回值和函数很像。
共同点:保存代码,有返回值,有形参数,相同的调用方式
- (void)btnClickWithBlock:(void (^)())block
{
// 0.动画(头部-开始动画)
[UIView beginAnimations:nil context:nil];
// 设置动画的执行时间
[UIView setAnimationDuration:1.0];
//block作为函数参数
block();
// 1.动画(尾部-提交动画-执行动画)
[UIView commitAnimations];
}
3.在多线程,异步任务,集合遍历,集合排序用的很多。
2.使用注意
1.block可以访问局部变量,但是不能修改。
2.如果真的要修改的话,请在变量的声明前加上关键字__block。
__block int b = 20;
3.block使用
//1.定义block变量
int (^sumBlock)(int, int);
void (^myBlock)();
//2.利用block封装代码
^(int a, int b) {
return a - b;
};
//3.利用typedef定义block类型
MyBlock block;
block = ^(int a, int b) {
return a - b;
};
int a = 10;
__block int b = 20;
void (^block)();
block = ^{
// block内部可以访问外面的变量
// NSLog(@"a = %d", a);
// 默认情况下,block内部不能修改外面的局部变量
// a = 20;
// 给局部变量加上__block关键字,这个局部变量就可以在block内部修改
b = 25;
};
block();