现在的无论是框架还是项目中,越来越多的使用block代码块。
个人觉得:第一可以使代码看起来更简单明了,第二可以取代以前的delegate使代码的逻辑看起来更清晰。

借一张图表达基本定义:

(1)最基础的用法案例,可以把block理解为一段类似变量一样的可执行函数代码片段:

[objc] view plaincopyprint?
  1. void (^printBlock)(NSString *x);
  2. printBlock = ^(NSString* str)
  3. {
  4. NSLog(@"print:%@", str);
  5. };
  6. printBlock(@"hello world!");

(2)由于是变量,所以比方法等可以更灵活的使用,因为可以把block当做一个变量传入到另一个方法。

[objc] view plaincopyprint?
  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. NSLog(@"我在玩手机");
  4. NSLog(@"手机没电了");
  5. [self chargeMyIphone:^{
  6. NSLog(@"去逛街");
  7. }];
  8. NSLog(@"我在看电视");
  9. }
[objc] view plaincopyprint?
[objc] view plaincopyprint?
  1. -(void)chargeMyIphone:(void(^)(void))finishBlock {
  2. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(110 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  3. NSLog(@"电充好了");
  4. finishBlock();
  5. });
  6. }

(3)上述方法是在单个类中执行的,如果在两个类中使用就能更加显现出其功能。可以用来取代代理,可以是逻辑变得清晰。如此处模拟一个发送HTTP请求的类。

[objc] view plaincopyprint?
  1. #import <Foundation/Foundation.h>
  2. typedef void(^HttpSendBlock)(NSDictionary *dict);
  3. @interface HttpReq : NSObject
  4. -(void)sendHttpReqUseUrl:(NSString*)url withBlock:(HttpSendBlock) block;
  5. @end
[objc] view plaincopyprint?
  1. #import "HttpReq.h"
  2. @implementation HttpReq
  3. -(void)sendHttpReqUseUrl:(NSString*)url withBlock:(HttpSendBlock) block{
  4. //……………发送请求并获取返回结果……………
  5. NSDictionary *dic = [[NSDictionary alloc]initWithObjects:[NSArray arrayWithObjects:@"name",@"state", nil nil] forKeys:[NSArray arrayWithObjects:@"wdl",@"ok", nil nil]];
  6. //返回请求结果
  7. block(dic);
  8. }
  9. @end

在一个Controller调用发送HTTP请求。

[objc] view plaincopyprint?
  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. HttpReq *req = [[HttpReq alloc]init];
  4. [req sendHttpReqUseUrl:@"www.baidu.com" withBlock:^(NSDictionary *dict) {
  5. NSLog(@"dict : %@",dict.description);
  6. }];
  7. }

看起来比较清晰,如果使用delegate的形势就相对比较繁琐一些,需要定义@optional,需要引用代理,实现代理,通过代理将结果返回回来。

iOS中得block代码块的定义及使用相关推荐

  1. Block代码块中使用局部变量注意点

    第一次写代码遇到报这个错,实在是想不通为什么,按常理应该是不会有问题,报错的呀??纠结了一会之后只好仔细查看报错原因咯,原来是: 当我们在block代码块中使用局部变量时,就会很容易出现如图的错误. ...

  2. [ios开发基础之]代码块

    iOS4引入了一个新特性,支持代码块的使用, 这将从根本上改变你的编程方式.代码块是对C语言的一个扩展,因此在Objective-C中完全支持.如果你学过Ruby,Python或Lisp编程 语言,那 ...

  3. C语言块级变量:在代码块内部定义的变量

    所谓代码块,就是由{ }包围起来的代码.代码块在C语言中随处可见,例如函数体.选择结构.循环结构等.不包含代码块的C语言程序根本不能运行,即使最简单的C语言程序(上节已经进行了展示)也要包含代码块. ...

  4. java代码块的定义_Java几种代码块的定义与常见问题

    Java几种代码块的定义与常见问题 代码块,通俗的说就是用一对"{}"括起来的一段代码,代码块可以根据位置分为以下几类: 局部代码块:局部代码块就是指直接在方法或是语句中定义的代码 ...

  5. Java中构造函数,静态代码块,构造代码块的执行顺序

    静态代码块:用static声明,jvm加载类的时候执行,只执行一次. 构造代码块:由{}定义,每一次创建对象的时候执行. 构造函数:对象一建立就调用相应的构造函数. 静态代码块 1.它是随着类的加载而 ...

  6. java构造块_java中的静态代码块、构造代码块、构造方法详解

    运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...

  7. CSDN博客中删除空白代码块

    在我们编写CSDN博客的时候,有时候我们创建了一些代码块然后删去时,会出现在博客中还有空白代码块出现的情况,比如我自己写的这个博客: 而我们在编辑模式修改时是看不到这个空白代码块的: 那我们应该如何删 ...

  8. react方法返回html_#react# 在页面中显示html代码块

    在页面中显示html代码块 在网上查了下,说有一下方法可以把html代码直接在页面中输出. textarea 不让编辑 去边框 去滚动条 直接把代码用ps做成图片上传到网页 用转换符号 在jsx中前面 ...

  9. MarkDown中插入的代码块无法自动识别换行

    MarkDown中插入的代码块无法自动识别换行 1.插入代码块的两种方式 单行的代码,就一个 ` 多行的代码块就三个```补充说明,可根据自己编写代码块的语言,设定对应的标签(比如Java-java, ...

最新文章

  1. Opera 60 正式发布,代号 Reborn 3
  2. axios  一些用法总结
  3. 内网渗透测试:内网信息收集与上传下载
  4. java集群调度_Cuckoo-Schedule
  5. 函数计算自动化运维实战 3 -- 事件触发自动创建快照
  6. java 日志框架 详解_java日志框架系列(9):logback框架过滤器(filter)详解
  7. 如何用Fiddler对手机(安卓/iOS)数据进行抓包
  8. html手机页面怎么长按不出复制,HTML -----对于手机页面长按会粘贴复制的禁用
  9. html语言考点,HTML知识点
  10. 三种基于感知哈希算法的相似图像检索技术
  11. C++ boost 正则表达式用法
  12. java为什么要连接Mysql_为什么要启动mysql workbech,java才能连接mysql数据库呢?
  13. 广州地铁公厕(洗手间)和母婴室信息汇总
  14. [QCTF2018]X-man-Keyword
  15. Python实现的简易HTTP代理服务器
  16. 形式化方法课程学习笔记(一)|Cop的安装以及简单使用
  17. 权限管理系统设计——入门(一)
  18. 信息系统基础知识---信息系统工程
  19. rem与px之间的转换
  20. 【更新于12.29】深度学习论文汇总

热门文章

  1. 怎么跑都不累?自然医学揭秘微生物组提升运动表现
  2. PICRUSt2:OTU或ASV等16S随便预测宏基因组且数据库增加10倍
  3. 宏基因组学习交流5群成立
  4. python使用matplotlib可视化、使用annotate函数以及arrowprops参数在可视化图像中添加箭头和文本注释(arrow and text annotation)
  5. R语言manova函数进行多元方差分析(Multivariate analysis of variance 、MANOVA)、如果多变量检验结果有显著性,summary.aov函数锦欣单变量方差分析
  6. R语言可视化包ggplot2包移除可视化图形的轴标签(刻度及其对应数值)实战(Remove Axis Labels)
  7. 层次聚类(cluster.AgglomerativeClustering)并通过TSNE进行可视化分析
  8. linux bash字符串截取
  9. 无损卡尔曼滤波UKF与多传感器融合
  10. 基于半监督学习的单体型组装算法