例如,在 Objective-C 中,当您实现要执行重复操作的方法时,您需要在该语言为您提供的几个选项之间进行选择:
@interface FancyMutableCollection : NSObject { }
-(void)sortUsingSelector:(SEL)comparator;
// or ...
-(void)sortUsingComparator:(NSComparator)cmptr;
@end
我想知道哪一个是better?
Objective-c 提供了许多选项:选择器、块、函数指针、符合协议的类实例等。
有时选择很明确,因为只有一种方法适合您的需求,但其余的呢?我不认为这只是时尚问题。
是否有任何规则可以知道何时使用选择器以及何时使用块?
我能想到的主要区别是,对于块,它们的行为就像闭包,因此它们捕获它们周围范围内的所有变量。当您已经拥有变量并且不想创建实例变量只是为了临时保存该变量以便操作选择器可以在运行时访问它时,这非常有用。
与集合相关,如果系统中有多个核心,则块具有并发运行的附加能力。目前 iPhone 中没有,但 iPad 2 中确实有,并且未来的 iPhone 型号很可能将拥有多个核心。在这种情况下,使用块将允许您的应用程序将来自动扩展。
在某些情况下,块也更容易阅读,因为回调代码就位于回调代码的旁边。当然情况并非总是如此,但有时它确实会使代码更易于阅读。
很抱歉请您参阅文档,但要更全面地了解块的优缺点,请查看这一页.
正如苹果公司所说:
块通常代表小的、独立的代码片段。因此,它们作为一种封装可以并发执行的工作单元的方法特别有用,或者在集合中的项目上执行,或者作为另一个操作完成时的回调。
块是传统回调函数的有用替代品,主要原因有两个:
它们允许您在调用时编写代码,稍后在方法实现的上下文中执行。
因此,块通常是框架方法的参数。
它们允许访问局部变量。
您无需使用需要包含执行操作所需的所有上下文信息的数据结构的回调,而是直接访问局部变量。
On 这一页
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)