关于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中使用。这个还没有仔细研究。
分享到:
相关推荐
原理文章:...block 的妙用:结合block和方法的优点实现iOS的链式编程 功能:主要针对段落样式NSMutableParagraphStyle和富文本NSMutableAttributedString进行封装,提升开发效率
其中,拼图是实现交互的主要工具,它具有直观、易用、模块化、结构化等优点,通过拖拽就能实现编程,极大地降低了用户的学习成本。 Block3D的底层是微软著名开源游戏引擎BabylonJS,Block3D全面继承了引擎强大、...
1.解释冷备份和热备份的不同点以及各自的优点 解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时...
提出了一种Simpler Block GMRES算法,它是Walker和Zhou的Simpler GMRES的模块版本。 类似于块GMRES,新算法还在每一步将块Krylov空间中的残差范数最小化。 理论分析表明,新算法构造的矩阵值多项式与原算法相同。 ...
由于有了Smart Client技术,我们可以很好的将胖客户端和瘦客户端应用的优点结合在一起,适应医院使用实际情况的需要。Smart Client可以自动灵活地进行升级和更新从而简化了系统的维护;Smart Client可以充分的利用...
本文主要阐述了电路仿真器如何与3D 场仿真器协同完成设计工作,从而使设计周期从原先的数周缩短为数日。这种解决方案的核心是“场路结合、协同仿真”,优点是有效的结合了三维电磁场仿真的精度和电路仿真的速度
为了有效地表示三维GIS空间实体,在地质块段模型的基础上,提出了基于八叉树和四面体格网的混合数据结构模型(block octree tetrahedron,BOT模型)。采用BOT模型生成算法对块段模型进行重新分割,八叉树作整体描述,...
③ 在进程通信或同步过程中执行了某种原语操作,如P操作(wait操作)、Block原语、Wakeup原语等。这种调度方式的优点是实现简单、系统开销小,适用于大多数的批处理系统环境。但它难以满足紧急任务的要求——立即执行...
内存分配器 基于显式空闲列表的自定义内存分配器 有几种常用的实现自定义内存分配器的方法,例如隐式空闲列表,...优点:快速 缺点:更多的内存碎片 下一个适合: 从最后一次拟合开始迭代自由列表util free block f
大数据Spark面试题汇总,共有79道面试题以及题目的解答 部分题目如下: 1. spark 的有几种部署模式,每种模式特点?...17. 介绍 parition 和 block 有什么关联关系? 18. Spark 应用程序的执行过程是什么?
③在进程通信或同步过程中执行了某种原语操作,如P操作(wait操作)、Block原语、Wakeup原语等。 这种调度方式的优点是实现简单、系统开销小,适用于大多数的批处理系统环境。但它难以满足紧急任务的要求——立即...
协程是用户级线程,由用户来管理,解决了CPU 上下文切换的开销,协程不适用于计算密集型的项目,因为计算密集型cpu会很少切换,所以协程的优点也就不存在,反而还增加了开发难度,但对于一个web服务器来说,其优势是...
每个选项都有优点或缺点,但特别是我主要关注缺点: float需要清除,而我对渲染性能一无所知。 他们是直截了当的,并且是Just Work:trade_mark:。 上次听说flex-box渲染效果很差,因为浏览器必须做很多重新粉刷...
子元素:inline-block; 优点:兼容性好; 不足:需要同时设置子元素和父元素 <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8> <meta name=viewport content=width=device-...
1. 解释冷备份和热备份的不同点以及各自的优点 2. 你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢? 3. 如何转换init.ora到spfile? 4. 解释data block , extent 和 segment的区别(这里建议用...
清除浮动的方法 1、额外标签法(隔墙法): 在浮动元素末尾添加一个空的标签,例如 优点:通俗易懂,书写方便 缺点:添加许多无意义的标签,... display: block; height: 0; clear: both; visibility: hidden; }
1 概 述 SST89C54/58(简称89C54/58)是...由于其存储结构上独特的优点,使得89C54/58非常适合于用做单片机仿真器。 2 SST89C54/58的程序存储结构 2.1 存储器结构 89C54/58片内的存储块BLOCK0占据从0000H到3F
请不要直接下载代码(案例代码超过5M) 完整代码 Github:https://github.com/Jeykit/MUKit 详细介绍: ... 优点: 只需要一个block就可以完成UITableView显示,无需写烦人的delegate和DataSource
1 概 述 SST89C54/58(简称89C54/58)...由于其存储结构上独特的优点,使得89C54/58非常适合于用做单片机仿真器。2 SST89C54/58的程序存储结构2.1 存储器结构 89C54/58片内的存储块BLOCK0占据从0000H到3FFFH/7F
电子存储设备的不断涌现,使许多便携设备大容量数据的实时处理和存储成为可能,CF卡( Compact Flash card)因具有容量大、体积小、性能优良、携带方便等优点,已广泛应用在数据采集系统和许多消费类电子产品中。...