A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔石炫 中级黑马   /  2014-9-27 01:01  /  787 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

block用途:保存代码块
block标志:^
block与函数的相似之处:
* 可以保存代码
* 有返回值
* 有形参
参考代码:
  1. #import <Foundation/Foundation.h>

  2. typedef int (*FunctionPointer) (int , int); // 使用宏定义定义新类型FunctionPointer
  3. typedef int (^BlockPointer) (int , int); // 使用宏定义定义新类型BlockPointer

  4. int sum(int a , int b)
  5. {
  6.         return a+b;
  7. }

  8. int main()
  9. {
  10.         int (^sumBlock) (int , int); // 定义一个block变量sumBlock,有int类型返回值,接受2个int类型的形参
  11.         sumBlock = ^(int a , int b){
  12. return a+b;
  13. }; // 将代码块赋值给sumBlock

  14.         FunctionPointer fp = sum;
  15.         BlockPointer bp = ^(int a , int b) {
  16.                 return a+b;
  17. };

  18.         NSLog(@”%d” , sum(1 , 2));
  19. NSLog(@”%d” , sumBlock(1 , 2));
  20. NSLog(@”%d” , fp(1 , 2));
  21. NSLog(@”%d” , bp(1 , 2));
  22. // 4个NSLog方法打印相同结果:3

  23. void test();

  24. test(); // 打印:a = 1   b = 3

  25.         return 0;
  26. }

  27. void test()
  28. {
  29.         int a = 1;
  30.         __block int b = 2;
  31.         void (^myBlock) () = ^{
  32.                 NSLog(@”a = %d” , a); // block内部默认可以访问外部变量
  33.                 //a++; // block内部默认不能修改外部变量

  34.                 b++; // 局部变量加上__block关键字,就可以在block内部修改
  35.                 NSLog(@”b = %d” , b);
  36. }
  37. myBlock();
  38. }
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马