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

2023-11-29

例如,在 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(使用前将#替换为@)

Objective-C 块与选择器。哪一个更好? 的相关文章

  • 创建宏来执行默认初始化

    我有很多重复这个简单样板的方法 id myObject if myObject self myObject myObject class new return myObject 所以我想用一个简单的宏来替换它 define default
  • 使用 UINavigationController 从右向左推送 ViewController

    大家都知道UINavigationController从左到右推送ViewController 有没有办法从右到左推送View 就像后退按钮的动画一样 现在我有这个 self navigationController pushViewCon
  • 核心数据:解决一个奇怪的 EXC_BAD_ACCESS 错误

    我在核心数据方面面临着一个非常奇怪的问题 我们来描述一下 定义 假设我有两个模型 ModelA and ModelB 在数据模型中ModelA有参考ModelB作为一对多关联 因此ModelB与 具有一对一关联ModelA Update 当
  • StoryBoard 2 导航控制器指向相同的视图

    有谁知道为什么这不起作用 这样 只有一个选项卡栏加载视图 另一个选项卡栏则显示黑屏 我在没有导航控制器的情况下尝试过 选项卡栏是正确的 而另一个在运行模式下不显示选项卡栏项目 如果有人感兴趣的话我对这个问题的回答 添加两个视图来启动我们感兴
  • 处理核心数据中的重复条目

    我有一个允许用户保存收藏夹的应用程序 我正在使用 Core Data 将收藏夹存储为托管对象 我已经编写了一些代码来防止存储重复项的可能性 但我想知道是否有更好的方法来做到这一点 每个收藏夹对象都有一个唯一的 ID 字段 在下面的代码中 我
  • UICollectionviewcell 更改背景

    如果我知道部分编号和项目编号 如何更改单元格中的背景 下面的代码显示了我如何尝试做到这一点 UICollectionViewCell collectionView UICollectionView collectionView cellFo
  • UITextInput setMarkedText:selectedRange 不起作用? (不可能!)

    我想以编程方式设置标记的文本 并且由于 iOS5 UITextView 和 UITextField 符合 UITextInput 这应该是可能的 但由于某种原因我总是得到markedText为零 我在这里缺少什么 这是我尝试过但没有成功的方
  • extern NSString *const 在类中。

    你好 我有这个头文件 import
  • 如何在 iOS 10 中安排本地通知(objective-c)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想使用 iOS 10 安排本地通知 我想知道如何执行此操作 我查遍了网络 但我一直在寻找仅用于注册和处理通知的线索 不适用于本地通知
  • 为什么这个 CLLocationCooperative2D 变量不可分配?

    我有一个地理编码器方法 我希望它返回为我生成的 CLLocationCooperative2D CLLocationCoordinate2D geocode CLGeocoder geocoder CLGeocoder alloc init
  • 如何在 iOS 8 中强制视图控制器方向?

    在 iOS 8 之前 我们结合使用以下代码支持的接口方向 and 应该自动旋转委托方法强制应用程序定向到任何特定方向 我使用下面的代码片段以编程方式将应用程序旋转到所需的方向 首先 我正在更改状态栏方向 然后 只需呈现并立即关闭模态视图即可
  • NSURLConnection didSendBodyData 进度

    我正在使用 POST 请求将一些数据上传到服务器 并且我正在尝试根据以下内容更新 UIProgressView 的进度totalBytesWritten的财产didSendBodyData的方法NSURLConnection 使用下面的代码
  • iOS 7 UIBarButtonItem 字体在点击时发生变化

    我正在尝试改变我的UIBarButtonItem字体 ViewController 加载时看起来不错 但是 如果我点击栏按钮 或者向右滑动 就像移动到上一个 ViewController 但然后拉回到当前的 ViewController 字
  • 断点在 xcode pod 文件中不起作用

    我有一个 xcode 项目 其中包含一些可可豆荚文件 当我在 cocoa pod 文件中放置断点时 调试器不会在这些断点处停止 为什么 有人对此有什么想法吗 我关注了 UdaySingh 的评论 它起作用了 我不确定他为什么没有发布答案 但
  • 在 Objective-c 中获取对象名称

    假设我有一个 Foo 类和该类 myFoo 的一个实例 Foo myFoo 是否有任何方法 dispalyFooObjectName 可以显示对象的名称 例如 NSLog i was called from s myFoo dispalyF
  • @package 指令在 Objective-C 中起什么作用?

    有谁确切知道 package 指令在 Objective C 中的用途吗 我在 Stephen Kochan 的 Objective C 2 0 编程中唯一提到过它 package 对于 64 位图像 可以在实现该类的图像中的任何位置访问实
  • WGS84 iOS 上外部 GPS 数据的大地水准面高度高度偏移

    对于我正在编写的应用程序 我们将 IOS 设备与外部传感器连接起来 该传感器通过本地 WiFi 网络输出 GPS 数据 该数据以相对于海拔高度的 原始 格式出现 一般来说 所有 GPS 高度都需要应用与基于当前位置的 WGS84 大地水准面
  • 将渐变应用于 UIImage - 如何消除颜色反转?

    我正在应用渐变UIImage 我希望它底部是黑色的 中间慢慢变成透明或浅灰色 基本上没问题 但我有一个问题 在这个渐变下 我的图像颜色在某些地方反转 这看起来很烦人 我该如何解决这个问题 为了您方便 我的方法如下 我尝试过选择不同的混合模式
  • 更改 UIDocumentInteractionController 图标

    我想知道如何更改表视图中显示的图标 我查看了文档UIDocumentInteractionController on 苹果网站但我没有成功编辑我的 plist 如果有人知道如何执行此操作 请提供帮助 Thank you 注册您的应用程序支持
  • 以编程方式使后退按钮转到上一个视图

    我有一个 UIBarButtonItem 并且想以编程方式设置转到前一个控制器的操作 在我的例子中 我之前的视图是 UITableViewController 下面是我当前用来制作栏按钮项目的代码 尽管该按钮尚未转到上一个视图 UIBarB

随机推荐