黑马程序员技术交流社区

标题: OC学习笔记之block的typedef [打印本页]

作者: chunhuayun    时间: 2015-10-10 08:12
标题: OC学习笔记之block的typedef
1、函数指针
定义格式:
返回类型 (*函数指针名)(参数列表);
【技巧】
1)把函数的声明拷贝过来
2)把函数名换成 (*函数指针变量名)
3)形参名可以不写

【好处】
可以灵活的使用p调用不同的方法
【使用举例】
  1. int add(int a, int b){
  2.     return  a + b;
  3. }
  4. int sub(int a, int b){
  5.     return a - b;
  6. }

  7. int main(int argc, const char * argv[])
  8. {
  9.     //定义一个函数指针
  10.     int (*p)(int,int);//int (*p)(int a,int b);也行,可以省略参数名
  11.     //给函数指针赋值
  12.     p = add;
  13.     //使用函数指针
  14.     int c = p(1,2);
  15.     NSLog(@"c = %d",c);
  16.     //也可以这样使用
  17.     p = sub;//使函数指针指向另一个方法
  18.     c = (*p)(2,1);
  19.      NSLog(@"c = %d",c);
  20.     return 0;
  21. }
复制代码


打印结果:
2015-10-07 14:35:42.955 加强02[1231:303] c = 3
2015-10-07 14:35:42.957 加强02[1231:303] c = 1
【给函数指针取别名】
取别名格式:
typedef 返回类型 (*新类型名)(参数列表);
【用别名定义函数指针格式】新类型名 指针变量名;
上述代码可以有如下改动,其他不用变
  1. //定义一个函数指针
  2.     typedef int (*Func)(int,int);//int (*p)(int a,int b);也行,可以省略参数名
  3.     //给函数指针赋值
  4.     Func p= add;
复制代码
2、block的typedef
【格式】
    typedef 返回值类型 (^newBlockTypeName)(参数列表);
【例子】
    typedef int (^myBlock)(int, int);
【应用举例】
  
  1. //【格式】typedef 返回值类型 (^newBlockTypeName)(参数列表);
  2.     //定义一个有参有返回值的block的别名
  3.     typedef int (^myBlock)(int, int);
  4.     //此时myBlock是一个类型,不再是一个单纯的变量了
  5.     myBlock b1 = ^(int a, int b){
  6.         return a + b;
  7.     };
  8.     NSLog(@"a + b = %d", b1(1,2));
复制代码

打印结果:
2015-10-07 14:45:23.489 加强02[1252:303] a + b = 3






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2