码迷,mamicode.com
首页 > 其他好文 > 详细

【Objective-C学习记录】第七天

时间:2015-12-08 23:51:48      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

代码块

  除了函数中的代码,代码块还包括变量绑定。代码块还有另一个名称:闭包(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\n",res);

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

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

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

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

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

  使用代码块不用写“^”,定义时需要添加,如: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里的函数定义:)

  

  

【Objective-C学习记录】第七天

标签:

原文地址:http://www.cnblogs.com/shvier/p/5031283.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!