iOS 关于Blocks
*本文参考了《Objective-C高级编程 iOS与OSX多线程和内存管理》一书,关于Block的介绍摘取自此书。
Objective-c 语言中Block语法格式为:
返回值类型 参数列表 表达式
c语言中的函数语法格式为
返回值类型 函数方法名 参数列表 表达式
从上面的语法可以看出,完整的Block与一般C语言函数定义相比,仅有两点不同:
(1)没有函数名
(2)带有"^”符号
以下是一个完整的Block示例:
^int (int count){return count + 1;}
在使用时Block,可以省略返回值类型,省略返回值类型时,如果表达式中又return语句,就自动使用该返回值的类型,如果没有return语句,就自动使用了void类型。表达式中含有多个return语句时,所有return的返回值必须相同,上面代码可以写成:
^(int count){return count + 1;}
另外,如果Block不带参数,则参数列表也可省略,如:
^void (void){printf("Blocks\n");}
可以写成
^{printf("Blocks\n");}
2.block类型变量
在Block语法下,可将Block语法赋值给声明为Block类型的变量中,声明Block类型变量的示例如下:
int (^blk)(int);
使用Block语法将Block赋值为Block类型的变量:
int (^blk)(int) = ^(int count){return count+1;};
因为Block类型的变量与通常的变量相同,所以也可以将Block类型变量赋值给Block类型变量:
int (^blk1)(int) = blk
也可以:
int (^blk2)(int);
blk2 = blk1;
在函数参数中使用Block类型变量可以向函数传递Block
void func(int (^blk)(int)){}
另外,可以使用typedef来简化代码,如通过typedef声明blk_t类型变量:
typedef int (^blk_t)(int);
实例:封装一个通用的网络请求函数(action为请求的方法名,parmeters为参数,请求成功获得到json数据)
伪代码如下:
typedef void(^ Failure)();
typedef void(^Success)(NSDictionary *dic);
#pragma mark - 网络操作
- (void)createAsynchronousRequest:(NSString *)action parmeters:(NSDictionary *)parmeters success:(Success)success failure:(Failure)failure {if(请求成功)success(responseObject);else{failure();}
}
使用方法如下:
[self createAsynchronousRequest:LogInAction parmeters:parameters success:^(NSDictionary *dic){//请求成功后在这里处理} failure:^{//请求失败后在这里处理}];
iOS 关于Blocks相关推荐
- iOS开发 Block的用法
一:在ios,blocks是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别:b ...
- afn原理 ios_afn原理
转载http://www.th7.cn/Program/IOS/201503/405717.shtml 1 类库功能简介 1.1 AFNetworking的大体思路 1.1.1 NSURLCo ...
- IOS Blocks 详细介绍
block类似与函数指针,与函数指针的区别在于其可以捕获(capture)其定义时作用域内的变量,当在其他位置调用时仍然可以使用. block是一种Objective-C对象,其数据结构中存在isa指 ...
- iOS Technical Support For Bloxorz Blocks 3D
App Technical Support Email:394175992@qq.com QQ:394175992
- 使最新版Code::Blocks支持C++11标准
在使用最新版的Code::Blocks的时候发现如果使用C++11的unordered_map编译器就会报错: error: 'unordered_map' does not name a type ...
- Delphi xe7 FireMonkey / Mobile (Android, iOS)生成 QR Code完整实例
这个实例在windows.OS X.IOS和Android等平台运行正常. 本文参考这个网站提供的方法:http://zarko-gajic.iz.hr/firemonkey-mobile-andro ...
- iOS 消息的传递机制
2019独角兽企业重金招聘Python工程师标准>>> 转载原地址:http://beyondvincent.com/blog/2013/12/14/124-communicatio ...
- iOS 开发中的多线程
线程.进程 什么是线程.进程 有的人说进程就像是人的脑袋,线程就是脑袋上的头发~~.其实这么比方不算错,但是更简单的来说,用迅雷下载文件,迅雷这个程序就是一个进程,下载的文件就是一个线程,同时下载 ...
- 【图灵】iOS技能书单——入门+进阶+精通
小编最近在研究一份不错的技能图谱(https://github.com/TeamStuQ/skill-map),遵照图谱精神,小编先做了个iOS技能书单,分享给大家. 老样子,点击书名查看完整目录和试 ...
最新文章
- 云梦天气预报软件测试,云梦天气预报15天
- 计算机语言import,python中import指的是什么意思
- linux的常用操作——open函数
- python3 dict 排序_Python 3.9 新增功能展望
- 如何在C/C++中动态分配二维数组
- Node.js:使用session存储用户信息
- DIV+CSS布局 - 弹性盒子布局
- 中建政研马海顺-PPP项目EPC工程总承包全过程管控与风险防范
- IRQL深入解析--IRQL级别
- Frefox安装AeroFox皮肤插件后菜单字体的美化
- 程序员该怎么创业才比较靠谱?
- oracle优化器analyzed,Oracle Optimizer:迁移到使用基于成本的优化器—–系列1.2-数据库专栏,ORACLE...
- ROS--Kinetic--执行roslaunch时遇到的问题和解决办法
- win10笔记本插上耳机没声音设置
- 实验十 文件读写 1. 文件排版(文本文件读写)
- python38_python 并发编程
- 电脑重装系统-利用PE系统盘安装
- 利用wine使用msoffice软件
- 常用的SQL*Plus命令
- 全排列-python递归解法