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、有参有返回值
- int (^blockName1)(int,int) = ^(int num,int a){
- return num*a;
- };
- //2、无参无返回值,bolck名后的()为空
- void (^blockName2)() = ^(){
- NSLog(@"blockName2 :I am amos");
- };
- //3、有参无返回值
- void (^blockName3)(NSString*) = ^(NSString* str){
- NSLog(@"blockName3: value = %@",str);
- };
- //4、无参有返回值
- NSString* (^blockName4)() = ^{
- return @"blockName4";
- };
- //5、block变量的使用
- NSLog(@"blockName1 value = %d",blockName1(2,5));
- blockName2();
- blockName3(@"I am 24 years old");
- NSLog(@"%@",blockName4());
-
- //6、以上都是先定义一个变量同时赋值,其实一个block就相当于一个变量
- //也可以先定义再赋值,如下
- blockName1 = ^(int a, int b){
- int m = a > b ? a : b;
- NSLog(@"max = %d", m);
- return m;
- };
- 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变量赋值,可以动态的绑定方法。
|