iOS之Block基础
来源:互联网 发布:阿里云有哪些产品 编辑:程序博客网 时间:2024/04/27 21:21
本文使用以下符号,含义列举如下:
1、return_type 表示返回的对象/关键字等(通常是void)
2、blockName 表示block的名称
3、var_type 表示参数的类型
4、varName 表示参数名称
声明一个Block,作为局部变量:
return_type (^blockName)(var_type) = ^return_type (var_type varName) { // ...};blockName(var);
声明一个Block型的属性
注意与局部变量的声明比较,有细微差别
@property (copy) return_type (^blockName) (var_type);
在定义方法时,声明Block型的形参
这里提供的是Block的定义
- (void)yourMethod:(return_type (^)(var_type))blockName;
Block作为实参
调用方法时,传入Block,这里需要的是Block的具体实现,如果已经定义了局部变量的Block,也可以直接传入名称。
[someObject doSomethingWithBlock: ^return_type (var_type varName){ //...}];
匿名Block
Block实现时,如上文的局部变量和实参,等号右边就是一个匿名Block,它没有blockName:
^return_type (var_type varName){ //...};
typedef Block
利用typedef简化Block的声明:
typedef return_type (^BlockTypeName)(var_type);
然后可用BlockTypeName定义Block,类似类名的使用方法:
BlockTypeName aBlock = ^return_type (var_type) { //...}
内联 Block
这种形式并不常用,匿名Block声明后立即被调用:
^return_type (var_type varName){ //...}(var);
内联 Block可用于代码分块,提高代码可读性,功能类似大括号的代码块,其它功能非常有限:
{ //...}
递归调用Block
Block内部调用自身,递归调用是很多算法基础,特别是在无法提前预知循环终止条件的情况下。注意 由于Block内部引用了自身,这里必须使用__block避免保留环问题。
__block return_type (^blockName)(var_type) = [^return_type (var_type varName){ if (returnCondition) { blockName = nil; return; } // ... blockName(varName);} copy];blockName(varValue);
Block作为返回值
方法的返回值是一个Block,可用于一些“工厂模式”的方法中:
- (return_type(^)(var_type))methodName{ // ...}
0 0
- iOS之Block基础
- IOS疯狂基础之 Block
- iOS 初学笔记之Block语法基础
- iOS之block基础及传值
- iOS block基础
- [ios开发基础之]代码块 ——block
- iOS开发之基础篇(14)—— Block
- ios block之理解
- IOS之Block使用
- ios学习之block
- IOS 之Block编程
- iOS 学习之 Block
- iOS之block
- iOS 之Block详解
- iOS 笔记之 Block
- IOS之Block详解
- iOS 之 block
- iOS学习之block
- LeetCode 220. Contains Duplicate III
- iOS网络监测如何区分2、3、4G?
- Unity简单AI编写
- BPTMQEditor文档编辑器插件开发(基于bootstrap[它的一些样式非常不错])
- 解决MySQL Error (2013): Lost connection to MySQL server at waiting for initial communication packet
- iOS之Block基础
- 数学三次危机(一)毕达哥拉斯学派的数学发现
- HashSet源码分析(基于1.8)
- TextView里的setText方法 .
- 微信端开发 种出一个稍微有点隐蔽的前后端BUG
- Rxandroid+Retrofit学习记录
- Mysql5.7安装及配置
- ASP.NET 全局变量和页面间传值方法
- spark1.4 基于rdd操作hbase