`
mmdev
  • 浏览: 12926479 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Block的优点

 
阅读更多

关于Block的语法我就不讲了,请看这篇文章

刚开始学习block的时候,觉得比较奇怪,block到底有什么用?它和函数有什么区别?经过一番学习,主要是这篇文章,发现block有以下几个地方最有用:

1.简化的回调过程,不用再实现并调用某个函数如Notification的方法,以前是这么写:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
- (void)keyboardWillShow:(NSNotification *)notification {   
// Notification-handling code goes here.   
}

现在可以这么写:
[[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillShowNotification 
    object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif)

或者UIView动画结束时的操作:

animateWithDuration:delay:options:animations:completion:

代替

setAnimationDidStopSelector:(SEL)selector

2.用作枚举类型遍历的方法,即相当于

for (id item in collection) {   
    // Code to operate on each item in turn.   
}


NSString *area = @"Europe";   
NSArray *timeZoneNames = [NSTimeZone knownTimeZoneNames];   
NSMutableArray *areaArray = [NSMutableArray arrayWithCapacity:1];   
NSIndexSet *areaIndexes = [timeZoneNames indexesOfObjectsWithOptions:NSEnumerationConcurrent   passingTest:^(id obj, NSUInteger idx, BOOL *stop) {   NSString *tmpStr = (NSString *)obj;   
return [tmpStr hasPrefix:area];   
}];   
NSArray *tmpArray = [timeZoneNames objectsAtIndexes:areaIndexes];   
[tmpArray enumerateObjectsWithOptions:NSEnumerationConcurrent|NSEnumerationReverse   
usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {   
[areaArray addObject:[obj substringFromIndex:[area length]+1]];   
}];   
NSLog(@"Cities in %@ time zone:%@", area, areaArray); 

3.排序

NSComparator finderSort = ^(id string1, id string2) {   
        NSRange string1Range = NSMakeRange(0, [string1 length]);   
        return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];   
};   
NSLog(@"finderSort: %@", [stringsArray sortedArrayUsingComparator:finderSort]);  

4.并发,在GCD和NSOperationQueue中使用。这个还没有仔细研究。

分享到:
评论

相关推荐

    iOS开发效率工具【封装富文本API,采用block实现链式编程】(结合block和方法的优点实现iOS的链式编程)

    原理文章:...block 的妙用:结合block和方法的优点实现iOS的链式编程 功能:主要针对段落样式NSMutableParagraphStyle和富文本NSMutableAttributedString进行封装,提升开发效率

    Block3D-一款免费的零代码Web3D开发工具

    其中,拼图是实现交互的主要工具,它具有直观、易用、模块化、结构化等优点,通过拖拽就能实现编程,极大地降低了用户的学习成本。 Block3D的底层是微软著名开源游戏引擎BabylonJS,Block3D全面继承了引擎强大、...

    Oracle面试问题-技术篇

    1.解释冷备份和热备份的不同点以及各自的优点 解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时...

    具有多个右侧的非对称系统的更简单的块GMRES

    提出了一种Simpler Block GMRES算法,它是Walker和Zhou的Simpler GMRES的模块版本。 类似于块GMRES,新算法还在每一步将块Krylov空间中的残差范数最小化。 理论分析表明,新算法构造的矩阵值多项式与原算法相同。 ...

    三甲医院管理系统HIS(C#版)

    由于有了Smart Client技术,我们可以很好的将胖客户端和瘦客户端应用的优点结合在一起,适应医院使用实际情况的需要。Smart Client可以自动灵活地进行升级和更新从而简化了系统的维护;Smart Client可以充分的利用...

    HFSS_Designer协同设计方法

    本文主要阐述了电路仿真器如何与3D 场仿真器协同完成设计工作,从而使设计周期从原先的数周缩短为数日。这种解决方案的核心是“场路结合、协同仿真”,优点是有效的结合了三维电磁场仿真的精度和电路仿真的速度

    论文研究-基于块段模型的三维GIS混合数据结构模型研究.pdf

    为了有效地表示三维GIS空间实体,在地质块段模型的基础上,提出了基于八叉树和四面体格网的混合数据结构模型(block octree tetrahedron,BOT模型)。采用BOT模型生成算法对块段模型进行重新分割,八叉树作整体描述,...

    处理机调度与死锁非抢占方式

    ③ 在进程通信或同步过程中执行了某种原语操作,如P操作(wait操作)、Block原语、Wakeup原语等。这种调度方式的优点是实现简单、系统开销小,适用于大多数的批处理系统环境。但它难以满足紧急任务的要求——立即执行...

    MemoryAllocator:自定义内存分配器

    内存分配器 基于显式空闲列表的自定义内存分配器 有几种常用的实现自定义内存分配器的方法,例如隐式空闲列表,...优点:快速 缺点:更多的内存碎片 下一个适合: 从最后一次拟合开始迭代自由列表util free block f

    大数据Spark面试题汇总

    大数据Spark面试题汇总,共有79道面试题以及题目的解答 部分题目如下: 1. spark 的有几种部署模式,每种模式特点?...17. 介绍 parition 和 block 有什么关联关系? 18. Spark 应用程序的执行过程是什么?

    操作系统课件

    ③在进程通信或同步过程中执行了某种原语操作,如P操作(wait操作)、Block原语、Wakeup原语等。 这种调度方式的优点是实现简单、系统开销小,适用于大多数的批处理系统环境。但它难以满足紧急任务的要求——立即...

    好用的协程库libfiber-master

    协程是用户级线程,由用户来管理,解决了CPU 上下文切换的开销,协程不适用于计算密集型的项目,因为计算密集型cpu会很少切换,所以协程的优点也就不存在,反而还增加了开发难度,但对于一个web服务器来说,其优势是...

    table-grid:使用显示的简单CSS网格系统

    每个选项都有优点或缺点,但特别是我主要关注缺点: float需要清除,而我对渲染性能一无所知。 他们是直截了当的,并且是Just Work:trade_mark:。 上次听说flex-box渲染效果很差,因为浏览器必须做很多重新粉刷...

    HTML+CSS实现单列布局水平居中布局

    子元素:inline-block; 优点:兼容性好; 不足:需要同时设置子元素和父元素 <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8> <meta name=viewport content=width=device-...

    Oracle面试题 oracle学习题

    1. 解释冷备份和热备份的不同点以及各自的优点 2. 你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢? 3. 如何转换init.ora到spfile? 4. 解释data block , extent 和 segment的区别(这里建议用...

    学习笔记18:CSS清除浮动

    清除浮动的方法 1、额外标签法(隔墙法): 在浮动元素末尾添加一个空的标签,例如 优点:通俗易懂,书写方便 缺点:添加许多无意义的标签,... display: block; height: 0; clear: both; visibility: hidden; }

    单片机与DSP中的基于单片机仿真器的设计

    1 概 述 SST89C54/58(简称89C54/58)是...由于其存储结构上独特的优点,使得89C54/58非常适合于用做单片机仿真器。 2 SST89C54/58的程序存储结构 2.1 存储器结构 89C54/58片内的存储块BLOCK0占据从0000H到3F

    ios-MVVM UITableView - 无需写烦人的delegate和DataSource.zip

    请不要直接下载代码(案例代码超过5M) 完整代码 Github:https://github.com/Jeykit/MUKit 详细介绍: ... 优点: 只需要一个block就可以完成UITableView显示,无需写烦人的delegate和DataSource

    单片机与DSP中的基于SST89C54/58的单片机仿真器的设计

    1 概 述 SST89C54/58(简称89C54/58)...由于其存储结构上独特的优点,使得89C54/58非常适合于用做单片机仿真器。2 SST89C54/58的程序存储结构2.1 存储器结构 89C54/58片内的存储块BLOCK0占据从0000H到3FFFH/7F

    基于单片机与CF卡的接口设计与实现

     电子存储设备的不断涌现,使许多便携设备大容量数据的实时处理和存储成为可能,CF卡( Compact Flash card)因具有容量大、体积小、性能优良、携带方便等优点,已广泛应用在数据采集系统和许多消费类电子产品中。...

Global site tag (gtag.js) - Google Analytics