// 1.函数指针专门用来指向C语言的函数的指针(专门用来存储函数名的地址)函数
// 2.选择器是用来存储OC中方法,(存的也是方法名)spa
// 3.block也是专门用来存储方法 (存的是函数体-实现函数功能的代码段).net
//指针
#import <Foundation/Foundation.h>code
void func1(){orm
NSLog(@"函数1");get
}it
int main(int argc, const char * argv[]) {io
@autoreleasepool {class
//===========1.回顾函数指针========
// 返回值类型(*函数指针名)(参数列表)
//声明一个能够指向返回值是空,没有参数的函数的函数指针
void (*pfunc)() = func1;
//用这个函数指针存储函数地址
pfunc = func1;
//经过函数指针调用函数
pfunc();
//函数指针的做用:将函数做为参数来传递
//=========2.block基础============
//"block"和"指针"同样,只是对一种类型的描述;经过表达式前面"*"来判断表达式是指针。咱们是经过表达式前面的"^"来判断表达式是block。指针专门用来存储地址,block专门用来存储代码块。
//block存储代码块的方式和函数指针存储函数的方式很像。
//想要存储什么样的函数的代码块,你就须要声明什么样的block去存储
//a.block的声明
//返回值类型 (^block变量名)(参数列表);
void (^block1)(); //声明了一个block变量block1;这个block变量可以存储是没有返回值,没有参数的函数的函数体
//b.block的初始化
//返回值类型 (^block变量名)(参数列表) = ^(参数列表){函数体};
void (^block2)() = ^(){
//写函数功能的实现的代码段(函数体)
NSLog(@"这个一个代码段");
};
//c.赋值
block1 = ^(){
NSLog(@"这第二个代码段");
};
//d.block的调用
//block中存储的代码段,在调用block调用的时候才会执行
//block调用和C语言的函数调用同样
block1();
block2();
}
return 0;
}