使用方式

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(闭包)的更多相关文章

  1. 浅析Block闭包

    浅析Block闭包 简单来说,block就是将函数及其上下文封装起来的对象,从功能上可以把它看作是C++中的匿名函数,也可称之为块. Block类型写法: 返回值+(^块名)+(参数)= ^(参数){ ...

  2. Objective-C中的Block(闭包)

    学习OC有接触到一个新词Block(个人感觉又是一个牛气冲天的词),但不是新的概念,不是新的东西.学过Javascript的小伙伴对闭包应该不陌生吧~学过PHP的应该也不陌生,在PHP5.3版本以后也 ...

  3. Objective-C中的Block(闭包) (轉載)

    来源: 伯乐在线 - 青玉伏案 链接:http://ios.jobbole.com/83229/ 学习OC有接触到一个新词Block(个人感觉又是一个牛气冲天的词),但不是新的概念,不是新的东西.学过 ...

  4. iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包

    本文章将从两个方向分别介绍 OC 与 swift 混编 1. 第一个方向从 swift工程 中引入 oc类 1. 1 如何在swift的类中使用oc类    1.2  如何在swift中实现oc的代理 ...

  5. iOS 尝试用 block 闭包 去代替delegate 实现方法

    通常都是这样创建alert 再加一个代理 // 创建一个UIAlertView并显示出来 UIAlertView *alertview = [[UIAlertView alloc] initWithT ...

  6. iOS block 闭包的学习

    iOS  闭包 学习 理解: 1 .   闭包外界无法访问内部变量 ,它是一个独立的代码块. 2 .   闭包可以作为 一个方法 ,甚至局部变量  全局 变量 3 .   闭包 是一种引用类型   注 ...

  7. IOS 浅谈闭包block的使用

    前言:对于ios初学者,block通常用于逆向传值,遍历等,会使用,但是可能心虚,会感觉block很神秘,那么下面就一起来揭开它的面纱吧. ps: 下面重点讲叙了闭包的概念,常用的语法,以及访问变量, ...

  8. iOS - Block 代码块

    1.Block Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的, ...

  9. ruby学习--block

    #当前块 class Block def a_method return yield if block_given? 'no block' end end obj=Block.new puts &qu ...

  10. Block深入浅出

    研究工具 clang 为了研究编译器的实现原理,我们需要使用 clang 命令.clang 命令可以将 Objetive-C 的源码改写成 C / C++ 语言的,借此可以研究 block 中各个特性 ...

随机推荐

  1. linq判断集合是否为空的方法

    Enumerable.Any 扩展方法可以判断集合为空: 如果不为空 if (!source.Any()) { //... }

  2. MongoDB安装并设置为windows服务以使其开机自启

    在MongoDB的官方下载windows平台的压缩zip文件,地址:https://www.mongodb.org/dr/fastdl.mongodb.org/win32/mongodb-win32- ...

  3. php随机数、时间、字符串函数,正则,数组函数

    <?php//1.随机数和时间//echo rand(); //随机数生成器//echo rand(0,10); //生成某个范围内的随机数 //echo time(); //取当前时间戳//e ...

  4. VS2012+Win7网站发布详细步骤

    VS2012+Win7网站发布详细步骤 本机环境: 本文分三个部分介绍Web项目发布的常规方法,大神级别可以略过,主要是为了方便一些初学者. 第一部分:VS2012把项目发布到文件系统. 第二部分:I ...

  5. struts2数据校验与国际化

    数据校验: Action里的validate()方法能校验action类所有的方法,如果有错,如:addFieldError,会自动返回到workflow校验拦截器不向下继续进行,不用return i ...

  6. Python爬虫--简单爬取图片

    今天晚上弄了一个简单的爬虫,可以爬取网页的图片,现在现在做一下准备工作. 需要的库:urllib 和 re urllib库可以理解为是一个url下载器,其中有三个重要的方法 urllib.urlope ...

  7. jenkins解决jenkins内存溢出问题

    在jenkins master-slave配置中,总是出现内存溢出问题,更换了机器设备仍然跑不起来: 问题如下: Status Code: 500 Exception: org.apache.comm ...

  8. Hadoop编程1:天气数据AWK & MapReduce

    本文介绍通过AWK和MapReduce两种方式统计出每年温度到最高气温直.awk速度虽然快,而且简短,但是数据量巨大到时候,就遇到力瓶颈,及时分布式执行awk脚本,也会出现机器死掉等问题,需要容错机制 ...

  9. StructureMap使用方法(转)

    终于到了题目中的MVC使用StructureMap依赖注入的配置与实现了.在ASP.Net三层架构应用中StructureMap的是最老的IOC/DI工具,也就是依赖注入,很多线上的项目都使用了Str ...

  10. android权限使用

    1.拍照权限使用: