block(闭包)
使用方式
1定义为类的属性
最后用来发布通知,执行block即可
甚至同时发送数据参数,给方法调用者,这样返回数据比返回值形式,更好,
因为这样传参,不是同步的,而是异步响应式的,更加灵活安全。
2定义为类的方法参数
价值:1给调用者传递参数,2保存调用者根据参数而操作的block代码 3在恰当的地方执行block,比如代理方法内
好处是可以延时跨方法执行内置block,应用场景是,传递服务器的代理方法数据
3定义为pch文件的宏
typedef void(^CompleteBlock)(id data,NSError *error);
我的理解
1block变量,不仅仅是个变量,可以理解为一个消息管道,消息器
2个人理解,block是个三段式管道
block头:负责定义block的空壳名字,实体参数
block手,负责发送事件消息,并可同时传递数据
block尾,根据消息和数据,做自己该做的事。
#把block嵌入类属性,让对象属性成为最快捷的消息广播器,
把block嵌入类方法,让方法更灵活。
别人调用我的类方法,不仅可以让我的方法执行我已写的操作,还能执行别人嵌入的操作
更具有灵活性,比如程序员的一天。
编码者代码
- (void) day:(void (^)()) work
{
[self preWork];//执行编码者的操作
work(); //执行调用者的操作
[self afterWork];//执行编码者的操作
}
调用者代码
[person day:^{
NSLog(@"打豆豆");
}];
#一天程序员这个例子,的确不错,不过有时会让人以为调用者的代码,是继续扩充编码者的代码业务
其实并不是这样,还是只是个传消息和数据的喇叭而已,调用者做什么事后续不会影响编码者
一般调用者只是拿到数据保存起来了,然后使用,那为何不用返回值直接返回呢? 下面继续谈
#block返回值的好处是,可以开多个通道,且是异步的
返回值只有一个通道,而block可以开很多个,一般成功一个回调,失败一个回调
不然你都堆在一个返回数组里,调用者又要展开数组,查看成功或失败,不好用
block(闭包)的更多相关文章
- 浅析Block闭包
浅析Block闭包 简单来说,block就是将函数及其上下文封装起来的对象,从功能上可以把它看作是C++中的匿名函数,也可称之为块. Block类型写法: 返回值+(^块名)+(参数)= ^(参数){ ...
- Objective-C中的Block(闭包)
学习OC有接触到一个新词Block(个人感觉又是一个牛气冲天的词),但不是新的概念,不是新的东西.学过Javascript的小伙伴对闭包应该不陌生吧~学过PHP的应该也不陌生,在PHP5.3版本以后也 ...
- Objective-C中的Block(闭包) (轉載)
来源: 伯乐在线 - 青玉伏案 链接:http://ios.jobbole.com/83229/ 学习OC有接触到一个新词Block(个人感觉又是一个牛气冲天的词),但不是新的概念,不是新的东西.学过 ...
- iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包
本文章将从两个方向分别介绍 OC 与 swift 混编 1. 第一个方向从 swift工程 中引入 oc类 1. 1 如何在swift的类中使用oc类 1.2 如何在swift中实现oc的代理 ...
- iOS 尝试用 block 闭包 去代替delegate 实现方法
通常都是这样创建alert 再加一个代理 // 创建一个UIAlertView并显示出来 UIAlertView *alertview = [[UIAlertView alloc] initWithT ...
- iOS block 闭包的学习
iOS 闭包 学习 理解: 1 . 闭包外界无法访问内部变量 ,它是一个独立的代码块. 2 . 闭包可以作为 一个方法 ,甚至局部变量 全局 变量 3 . 闭包 是一种引用类型 注 ...
- IOS 浅谈闭包block的使用
前言:对于ios初学者,block通常用于逆向传值,遍历等,会使用,但是可能心虚,会感觉block很神秘,那么下面就一起来揭开它的面纱吧. ps: 下面重点讲叙了闭包的概念,常用的语法,以及访问变量, ...
- iOS - Block 代码块
1.Block Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的, ...
- ruby学习--block
#当前块 class Block def a_method return yield if block_given? 'no block' end end obj=Block.new puts &qu ...
- Block深入浅出
研究工具 clang 为了研究编译器的实现原理,我们需要使用 clang 命令.clang 命令可以将 Objetive-C 的源码改写成 C / C++ 语言的,借此可以研究 block 中各个特性 ...
随机推荐
- Jfianl
http://www.oschina.net/question/257183_149268----------- 添加Handler: me.add(new ContextPathHandler(&q ...
- [Ubuntu][Linux]更改PATH路径
1.什么是环境变量(PATH) 在Linux中,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行. 我们知道查阅文件属性的指令ls 完整文件名为:/ ...
- Slip.js(移动端跟随手指滑动组件,零依赖)
Slip.js可用于移动端滑动banner,移动端整屏滑动等效果,个人觉得用于移动端滑动banner比较好,不会和iScroll.js起冲突,因为它不依赖任何其它的js库. Html: <!do ...
- C语言 ---- 函数 结构体 iOS学习-----细碎知识点总结
函数的定义 返回值类型 函数名(形式参数列表) { 函数的实现 } 函数不允许嵌套定义 如果函数的定义在主调函数之后,那么要进行提前声明才能使用. // 匿名结构体,结构 ...
- VMware安装Linux第一天
今天上午下载了VMware-workstation_full_12.1.1.6932,它的Key是5A02H-AU243-TZJ49-GTC7K-3C61N,这些都是网络上搜罗到的. VMWare安装 ...
- Unit01-OOP-对象和类(上)
Unit01-OOP-对象和类(上) 1.什么是类?什么是对象? 1)现实生活是由很多很多对象组成的 基于对象抽出了类 2)对象:真实存在的单个的个体 类:类型.类别,代表一类个体 ...
- Java Map 集合类简介
作者:Jack Shirazi 了解最常用的集合类型之一 Map 的基础知识以及如何针对您应用程序特有的数据优化 Map. 本文相关下载: · Jack 的 HashMap 测试 · Oracle ...
- (一) ARM 内存SDRAM 讲解
2.SDRAM内存工作原理 上面产生的误解关于 Bank ,这个bank 不是 和 S3C2440 芯片有关系(RAM 自身有bank , SDRAM 自身也有bank ,就像书 有 好几章节一样) ...
- 设置程序集(dll)引用路径,整洁美观
static class Program { //设置引用程序集路径 static Program() { AppDomain.CurrentDomain.SetData("PRIVATE_ ...
- maven、strutst版本号
struts.2.3.15.3 :大版本号 struts1-->struts2 :分支版本号 增加新功能 :小版本号 修复bug beta:公测版release:发行版(已可以使用)Genera ...