zoukankan      html  css  js  c++  java
  • 【Objective-C学习记录】第七天

    代码块

      除了函数中的代码,代码块还包括变量绑定。代码块还有另一个名称:闭包(closure)。

      代码块保护两种类型的绑定:自动型与托管型。自动绑定使用栈中的内存,托管绑定使用堆中的内存。

      代码块的格式与函数指针的有点像。函数指针:void (*f)(void);代码块:void (^f)(void);只需把“*”换成“^”。

      然后我们来写一个代码块:

      int (^f)(int a,int b) = ^(int a,int b){return (a+b);};

      int res = f(1,2);

      printf("res is %d ",res);

      这里通过代码块实现了计算两个数相加。语法概括如下:

      <returnType> (^blockName)(list of arguments) = ^(arguments){body;};

      //<返回类型>(^代码块名)(参数列表) = ^(参数){代码体;};

      注:编译器可以推断代码块的返回类型,所以可以省略它,当代码块没有参数时,参数也可以省略。如下(打印“Hello iOS”):

      void (^hello)() = ^{printf("Hello iOS ");};

      使用代码块不用写“^”,定义时需要添加,如:int res = f(1,2);跟函数一样。如果直接使用代码块,不需要创建一个代码块变量,直接关联内容即可,下面是一个对数组排序的功能:

      NSArray *array = [NSArray arraywithObjects:@"A",@"C",@"E",@"D",@"B",nil];

      NSArray *res = [array sortedArrayUsingComparator:^(NSString *obj1,NSString *obj2)]{

      return [obj1 compare:obj2];}];

      看起来好像JavaScript里的函数定义:)

      

      

  • 相关阅读:
    卷积神经网络要点解析
    quicksork解析
    梳理知识点(一)
    高斯混合模型以及EM算法
    adaboost/gdbt/xgboos/random forestt的异同点
    Anki使用
    Markdown写作入门
    VBox复制虚拟机镜像后的操作
    Hadoop集群之vsftpd设置
    使用Oracle函数将银行归类,方便引用
  • 原文地址:https://www.cnblogs.com/shvier/p/5031283.html
Copyright © 2011-2022 走看看