黑马程序员****OC语言基础****Block概念和理解
2015-10-28 00:52
489 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
——-
Block:
Block对象是一个C级别的语法和运行机制。
由于Objective-C 和 C++ 都是衍生自 C,block被设计为可同时兼容这三种语言。
定义格式:
void(^block名)()
= ^{代码块;}
使用格式:
block名();
block可以分为:无参无返回值、无参有返回值、有参无返回值、有参有返回值
当block作为返回值:
运行结果:xxxxx
Good
x = 121
block类型作为返回值,可以参考函数作为返回值进行理解
实例分析:用block传递程序员的一天
运行结果:
起床
刷牙
去车站
坐车
了解项目
去车站
坐车回家
吃饭
睡觉
---------------
---------------
起床
刷牙
去车站
坐车
分析项目
去车站
坐车回家
吃饭
睡觉
---------------
---------------
起床
刷牙
去车站
坐车
写项目
去车站
坐车回家
吃饭
睡觉
---------------
---------------
起床
刷牙
去车站
坐车
测试项目
去车站
坐车回家
吃饭
睡觉
---------------
---------------
起床
刷牙
去车站
坐车
离职
去车站
坐车回家
吃饭
睡觉
---------------
---------------
注释内的内容是另一种写法,直接插入代码段就可以,不用每次调用work函数。
——-
Block:
Block对象是一个C级别的语法和运行机制。
由于Objective-C 和 C++ 都是衍生自 C,block被设计为可同时兼容这三种语言。
定义格式:
void(^block名)()
= ^{代码块;}
使用格式:
block名();
block可以分为:无参无返回值、无参有返回值、有参无返回值、有参有返回值
当block作为返回值:
<span style="font-size:24px;">#import <Foundation/Foundation.h> typedef void (^newType)(); newType test1 () { newType w1 = ^{ NSLog(@"XXXXX"); NSLog(@"Good");}; return w1; } typedef int (^bestType2)(int a,int b); bestType2 test2(){ return ^(int a,int b){ return a+b; }; } int main(int argc, const char * argv[]) { @autoreleasepool { newType n1 = test1(); n1(); bestType2 n2 = test2(); int x = n2(45,76); NSLog(@"x = %d",x); } return 0; }</span>
运行结果:xxxxx
Good
x = 121
block类型作为返回值,可以参考函数作为返回值进行理解
实例分析:用block传递程序员的一天
/* 起床 刷牙 去车站 坐车 了解项目 去车站 坐车回家 吃饭 睡觉 */ #import <Foundation/Foundation.h> //workBlock作为参数 void work(void (^workBlock)()){ NSLog(@"起床"); NSLog(@"刷牙"); NSLog(@"去车站"); NSLog(@"坐车"); workBlock(); //此处是代码段插入的位置 NSLog(@"去车站"); NSLog(@"坐车回家"); NSLog(@"吃饭"); NSLog(@"睡觉"); } typedef void (^workBlock)(); workBlock w; void workDay(int n){ switch (n) { case 1: w = ^{ NSLog(@"了解项目"); }; break; // work(^ { // NSLog(@"了解项目"); // }); // break; case 2: w = ^ { NSLog(@"分析项目"); }; break; // work(^ { // NSLog(@"分析项目"); // }); // break; case 3: w = ^ { NSLog(@"写项目"); }; break; // work(^ { // NSLog(@"写项目"); // }); // break; case 4: w = ^ { NSLog(@"调试项目"); }; break; // work(^ { // NSLog(@"调试项目"); // }); // break; case 5: w = ^ { NSLog(@"离职"); }; break; // work(^ { // NSLog(@"离职"); // }); // break; default: break; } work(w); } int main(int argc, const char * argv[]) { @autoreleasepool { for (int i=1; i<=5; i++) { workDay(i); NSLog(@"---------------"); NSLog(@"---------------"); } } return 0; }
运行结果:
起床
刷牙
去车站
坐车
了解项目
去车站
坐车回家
吃饭
睡觉
---------------
---------------
起床
刷牙
去车站
坐车
分析项目
去车站
坐车回家
吃饭
睡觉
---------------
---------------
起床
刷牙
去车站
坐车
写项目
去车站
坐车回家
吃饭
睡觉
---------------
---------------
起床
刷牙
去车站
坐车
测试项目
去车站
坐车回家
吃饭
睡觉
---------------
---------------
起床
刷牙
去车站
坐车
离职
去车站
坐车回家
吃饭
睡觉
---------------
---------------
注释内的内容是另一种写法,直接插入代码段就可以,不用每次调用work函数。
相关文章推荐
- What does “warning: not all control paths return a value” mean? (C++)
- 使用两个栈实现一个队列
- C++ 参数传递,定义与声明,命名空间等基本知识
- 黑马程序员****OC语言基础****MRC的理解
- C语言swap函数总结
- C++运算符重载详解
- 自学C++第一天
- C++Primer笔记二
- VC++动态链接库(DLL)编程
- C/C++ 之 char*,const char*和string 三者转换
- C语言程序入门第一节课/4
- c++单例模式
- Data语意学 - 类的大小应该是多少? (The Semantics of Data )
- 格雷码的C++实现
- C++plus 2.6
- C语言:值传递
- 【c++面向对象编程】工资管理系统
- C++对象构造,析构,new,delete分析
- 谈谈:C++类的“包含”机制
- c++ int 转char * 函数 _itoa_s