基本用法
- 作用
block用来保存一段代码 - block的标志: ^
- block与函数
- block与函数很像
1.可以保存代码
2.有返回值
3.有形参
4.调用方式一样
- block与函数很像
- Block的使用很像函数指针,不过与函数最大的不同是:Block可以访问函数以外、词法作用域以内的外部变量的值。换句话说,Block不仅 实现函数的功能,还能携带函数的执行环境
定义block变量
/**
如果block没有形参,可以省略后面的()
*/
void (^myBlock)() = ^{
NSLog(@"------");
NSLog(@"--------");
};
myBlock();
定义属性block
@property (nonatomic, copy) void (^completionClock)();
带参数和返回值的block
int sum(int a, int b)
{
return a + b;
}
int main()
{
//指向函数的指针
int (*p)(int,int) = sum;
int d = p(10,12);
NSLog(@"%d",d);
//OC中不常用指向函数的指针,一般用block代替
int (^sumblock)(int, int) = ^(int a, int b) {
return a + b;
};
int c = sumblock(11, 11);
NSLog(@"%d",c);
//用block输出n条直线
void (^lineblock)(int) = ^(int n)
{
for (int i = 0; i < n; i++) {
NSLog(@"------");
}
};
myblock2(5);
return 0;
}
block使用总结
1>如何定义block变量
int (^sumBlock)(int,int); void (^myBlock)();
2>如何利用block封装代码
^(int a, int b) {
return a - b;
};
^() {
NSLog(@"----");
};
^ {
NSLog(@"-----");
};
-
block访问外部变量
- block内部可以访问外面的变量
- 默认情况下,block内部不能修改外面的局部变量
- 给局部变量加上__block关键字,这个局部变量可以在block内部修改
-
利用typedef定义block类型
typedef int (^MyBlock)(int, int);
以后就可以利用MyBlock这种类型来定义block变量
MyBlock block;
MyBlock b1,b2;
b1 = ^(int a, int b) {
return a + b;
};
MyBlock b3 = ^(int a, int b){
return a + b;
};
网友评论