block用来保存一段代码
block的标志:^
block跟函数很像:
1. 可以保存代码
2. 有返回值
3. 有形参
4. 调用方式一样
定义bolock变量
例1:
void (^myBlock)() = ^{
NSLog(@“———————“);
};
利用block变量调用block内部的代码
myblock();
例2:
// 如果block没有形参,可以省略后面的()
int (^sumBlock)(int, int) = ^(int a, int b){
return a + b;
};
调用block:
int c = sumBlock(10, 11);
或者:
int (^sumBlock)(int, int);
sumBlock = ^(int a, int b) {
return a + b;
};
例3:
void (^lineBlock)(int) = ^(int n)
{
for (int i = 0; i<n; i++) {
NSLog(@“——————“);
}
};
调用:
lineBlock(5);
blocky要掌握的东西
1> 如何定义block变量
int (^sumBlock)(int, int);
void (^myBlock)();
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 block;
MyBlock b1, b2;
b1 = ^(int a, int b) {
return a - b;
};
MyBlock b3 = ^(int a, int b) {
return a - b;
};