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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chunhuayun 中级黑马   /  2015-10-10 08:11  /  489 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、block的基本概念
1)block对象是一个C级别的语法和运行机制,它与标准的C函数类似,不同之处在于,它除了有可执行代码以外,它还包含了与堆、栈内存绑定的变量。因此,block对象包含着一组状态数据。这些数据在程序执行时用于对行为产生影响。

2)你可以用block来写一些可以传到API中的函数语句,可选择性的存储,并可以使用多线程,作为一个回调,block特别的有用,因为block既包含了回调期间的代码,又包含了执行期间需要的数据。

3)由于objective-C和C++都是衍生自C,block被设计为可同时兼容这三种语言

2、block的基本用法

用【^】操作符来表明一个block变量,并指明block语句的开始,block的主体部分包含在【{}】内,像下面的例子中一样.

3、应用举例

  1. //1、有参有返回值
  2.         int (^blockName1)(int,int) = ^(int num,int a){
  3.             return num*a;
  4.         };
  5.         //2、无参无返回值,bolck名后的()为空
  6.         void (^blockName2)() = ^(){
  7.             NSLog(@"blockName2 :I am amos");
  8.         };
  9.         //3、有参无返回值
  10.         void (^blockName3)(NSString*) = ^(NSString* str){
  11.             NSLog(@"blockName3: value = %@",str);
  12.         };
  13.         //4、无参有返回值
  14.         NSString* (^blockName4)() = ^{
  15.             return @"blockName4";
  16.         };
  17.         //5、block变量的使用
  18.         NSLog(@"blockName1 value = %d",blockName1(2,5));
  19.         blockName2();
  20.         blockName3(@"I am 24 years old");
  21.         NSLog(@"%@",blockName4());
  22.         
  23.         //6、以上都是先定义一个变量同时赋值,其实一个block就相当于一个变量
  24.         //也可以先定义再赋值,如下
  25.         blockName1 = ^(int a, int b){
  26.             int m = a > b ? a : b;
  27.             NSLog(@"max = %d", m);
  28.             return m;
  29.         };
  30.         blockName1(2,5);
复制代码

打印结果:
2015-10-07 14:05:47.335 分类扩展[1154:303] blockName1value = 10
2015-10-07 14:05:47.337 分类扩展[1154:303] blockName2 :Iam amos
2015-10-07 14:05:47.338 分类扩展[1154:303] blockName3:value = I am 24 years old
2015-10-07 14:05:47.339 分类扩展[1154:303] blockName4
2015-10-07 14:05:47.339 分类扩展[1154:303] max = 5

【结果分析】
从上述例子可以看出,可以很方便的给block变量赋值,可以动态的绑定方法。


0 个回复

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