block的基本使:
--------------->> int(p)(int, int ); 是函数指针*,所以block的定义和函数指针类似
block助记符:inlineBlock
- 使用实例:
int(^myblock)(int,int) = ^(int num1,int num2){
return num1+num2;
};
int sum = myblock(3,5); //把变量mybolck赋值给sum
printf("sum = %d",sum);
block的typedef:
- 给函数指针起别名:
typedef int (*NewType)(int x,int y); //给一个函数指针起别名,NewType是一个类型
NewType f1,f2,f3 //f1,f2,f3为函数指针
- 给block起别名:
typedef 返回值类型(^新类型别名)(参数类型列表);
typedef int (^NewType)(int x,int y);
NewType f1,f2,f3
block访问外部变量:
- 当定义block的时候,block会把外部变量的值以count的形式复制一份存放到block的所在内存中,如果引入的是全局变量,则不是以count方式复制
- 复制进来变量的值不能进行修改,除非重新声明重名变量再进行修改,或者“__block int m = 10”这样声明变量就不会以count方式复制进来
- 当外部变量定义方式为“__block int m = 10”,以后用m都是block代码段的m的值
block作为函数参数:
#import <Foundation/Foundation.h>
void work(void(^workBlock)()){
printf("起床\n");
workBlock();
printf("睡觉\n");
}
void workDay(int n){
work(^(){
printf("了解项目\n");
});
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
workDay(1);
}
return 0;
}
block作为函数返回值(4个步骤):
#import <Foundation/Foundation.h>
//1>使用typedef定义一个新的类型(block类型)
typedef void (^newType)();
//2>用新的类型作为函数的返回值
newType test(){
//定义block变量
newType w1 = ^(){
NSLog(@"hello world");
};
return w1; //返回值block
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
//3>定义block变量接收函数返回的结果
newType n1 = test();
//4>执行block
n1();
}
return 0;
}