gpt4 book ai didi

Objective-C block 与选择器。哪一个更好?

转载 作者:太空狗 更新时间:2023-10-30 03:47:12 27 4
gpt4 key购买 nike

在 objective-c 中,当您实现一个将执行重复操作的方法时,例如,您需要在该语言为您提供的几个选项之间进行选择:

@interface FancyMutableCollection : NSObject { }
-(void)sortUsingSelector:(SEL)comparator;
// or ...
-(void)sortUsingComparator:(NSComparator)cmptr;
@end

我想知道哪个更好

Objective-c 提供了许多选项:选择器、 block 、指向函数的指针、符合协议(protocol)的类的实例等。

有时候选择很明确,因为只有一种方法适合您的需求,但其他的呢?我不认为这只是时尚问题。

是否有任何规则可以知道何时使用选择器以及何时使用 block ?

最佳答案

我能想到的主要区别是,对于 block ,它们的行为类似于闭包,因此它们捕获了它们周围范围内的所有变量。当您已经有了变量并且不想创建一个实例变量只是为了临时保存该变量以便操作选择器可以在运行时访问它时,这非常有用。

关于集合,如果系统中有多个核心, block 具有并发运行的额外能力。目前在 iPhone 中还没有,但 iPad 2 确实有,而且 future 的 iPhone 型号很可能会有多核。在这种情况下,使用 block 将允许您的应用程序在未来自动扩展。

在某些情况下, block 也更易于阅读,因为回调代码就在回调代码的旁边。当然,情况并非总是如此,但有时它确实会使代码更易于阅读。

很抱歉向您介绍文档,但要更全面地了解 block 的优缺点,请查看 this page .

正如 Apple 所说:

Blocks represent typically small, self-contained pieces of code. As such, they’re particularly useful as a means of encapsulating units of work that may be executed concurrently, or over items in a collection, or as a callback when another operation has finished.

Blocks are a useful alternative to traditional callback functions for two main reasons:

They allow you to write code at the point of invocation that is executed later in the context of the method implementation. Blocks are thus often parameters of framework methods.

They allow access to local variables. Rather than using callbacks requiring a data structure that embodies all the contextual information you need to perform an operation, you simply access local variables directly.

关于 this page

关于Objective-C block 与选择器。哪一个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7562256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com