Objective-C--block的概念和基本使用
2015-10-15 09:16
741 查看
一、block的概念
Block对象是一个C级别的语法和运行机制。它与标准的C函数类似,不同之处在于,它除了有可执行代码以外,它还包含了与堆、栈内存绑定的变量。因此,Block对象包含着一组状态数据,这些数据在程序执行时用于对行为产生影响。可以用Block来写一些可以传到API中的函数语句,可选择性地存储,并可以使用多线程。作为一个回调,Block特别的有用,因为block既包含了回调期间的代码,又包含了执行期间需要的数据,由于Objective-C 和 C++ 都是衍生自 C,block被设计为可同时兼容这三种语言。
二、block的基本使用
1、无参无返回值定义一个无参无返回值的block变量并且赋值
void (^block变量名)() = ^(){ //代码块语句 }; //优化: void (^block变量名)() = ^{ };
void(^myBlock1)() = ^() { //代码块语句 NSLog(@"黑马程序员"); };
void(^myBlock2)() = ^ { //代码块语句 NSLog(@"Hello , World"); };
block变量的使用
block变量名();
//使用block变量 myBlock1(); myBlock2();
打印结果:
2015-10-15 08:40:31.006 block的使用[990:57199]黑马程序员
2015-10-15 08:40:31.007 block的使用[1015:58597] Hello , World
2、有参无返回值
定义一个有参无返回值的block变量并且赋值
void (^变量名)(参数类型及个数) = ^(形参列表){ //代码块语句 };
void(^myBlock3)(int,int) = ^(int a,int b) { NSLog(@"a + b = %d",a+b); };
使用有参无返回值的block,并传两个参数
myBlock3(88,99);
打印结果:
2015-10-14 08:58:24.512 block的使用[1052:62561] a + b = 187
重新定义myBlock3
//先定义变量再赋值 myBlock3 = ^(int x,int y){ int max = x>y ? x:y; NSLog(@"max = %d",max); }; myBlock3(55,66);
打印结果:
2015-10-14 08:59:35.332 block的使用[1065:63925] max = 66
3、有参有返回值
定义一个有参无返回值的block变量并且赋值 void (^变量名)(参数类型及个数) = ^(形参列表){ //代码块语句:return语句; };
//定义一个有参有返回值的block变量并且赋值 int(^myBlock4)(int ,int ) = ^(int c,int d) { //代码块语句:return 语句; return c+d; }; //定义变量接受返回值 int add = myBlock4(12,23); //打印 NSLog(@"add = %d",add);
打印结果:
2015-10-15 09:12:53.181 block的使用[1116:68164] add = 35
相关文章推荐
- OC 日志打印
- Objective-C--分类的使用
- Expected BEGIN_OBJECT but was BEGIN_ARRAY at line
- Objective-C中的一些细枝末节(更新)
- WaitForMultipleObjects使用详解
- WaitForMultipleObjects使用详解
- json二级对象数据变成字段串[object Object]
- 《Programming with Objective-C》第七章 Values and Collections
- 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-04-目标函数
- Objective-C:KVO机制
- geodatabase中如何获取feature class的ObjectID
- Android数据解析获取JSONObject的key值-Iterator应用
- Objective-C:KVC机制
- How to prevent object bloat in PostgreSQL
- objective-c制作汤姆猫
- Object - C的知识总结->方法
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- Objective—C常见特性(instancetype和id比较、@property、枚举宏(Enumeration Macros))
- Caused by: java.lang.ClassNotFoundException: com.alibaba.fastjson.JSONObject
- IOS 开发学习(1): 学习纲领以及Objective-C 基本语法学习