NSInvocableOperation 和 NSBlockOperation 有什么区别

2024-01-16

Foundation Framework中共有三个操作类(NSOperation, NSInvocationOperation and NSBlockOperation).

我已经读过并发编程指南 https://developer.apple.com/library/mac/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationObjects/OperationObjects.html#//apple_ref/doc/uid/TP40008091-CH101-SW1但我不明白这三个类之间到底有什么区别。请帮我。


NSBlockOperation https://developer.apple.com/library/ios/documentation/cocoa/reference/NSBlockOperation_class/Reference/Reference.html执行一个块。NSInvocationOperation https://developer.apple.com/library/ios/documentation/cocoa/reference/NSInvocationOperation_Class/Reference/Reference.html#//apple_ref/occ/cl/NSInvocationOperation执行一个NSInvocation https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSInvocation_Class/Reference/Reference.html(或由目标、选择器、对象定义的方法)。NSOperation https://developer.apple.com/library/ios/documentation/cocoa/reference/NSOperation_class/Reference/Reference.html#//apple_ref/occ/cl/NSOperation必须子类化,它提供了最大的灵活性,但需要最多的代码。

NSBlockOperation 和 NSInitationOperation 都是 NSOperation 的子类。它们由系统提供,因此您不必为简单任务创建新的子类。

对于大多数任务来说,使用 NSBlockOperation 和 NSInitationOperation 应该足够了。


下面是使用这三个方法执行完全相同操作的代码示例:

// For NSOperation subclass
@interface SayHelloOperation : NSOperation
@end

@implementation SayHelloOperation

- (void)main {
    NSLog(@"Hello World");
}

@end

// For NSInvocationOperation
- (void)sayHello {
    NSLog(@"Hello World");
}


- (void)startBlocks {
    NSBlockOperation *blockOP = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"Hello World");
    }];
    NSInvocationOperation *invocationOP = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(sayHello) object:nil];
    SayHelloOperation *operation = [[SayHelloOperation alloc] init];

    NSOperationQueue *q = [[NSOperationQueue alloc] init];
    [q addOperation:blockOP];
    [q addOperation:invocationOP];
    [q addOperation:operation];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSInvocableOperation 和 NSBlockOperation 有什么区别 的相关文章

  • CALayer边框奇怪问题

    我正在向 CALayer 添加边框 但有一些奇怪的行为 在我应用的边框之后出现模糊边框 参见屏幕截图 这是我的代码 void configureLabel self hidden YES self textAlignment NSTextA
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • AVAssetExportSession 无法导出从 iCloud 下载的视频

    我正在尝试创建从用户相册中选择的视频的缩小版本 输出的最大尺寸为 720p 因此 在检索视频时 我使用 mediumQualityFormat as the deliveryMode 如果用户设备中不存在原始视频或其中等质量版本 这会导致
  • iOS 7 上 Safari 浏览器的用户代理

    我只想在带有 Safari 浏览器的 iPhone 和 iPod 中打开我的网站 对于 Chrome Dolphin 等任何其他浏览器 它不应该打开 但目前我从几乎所有设备获得相同的用户代理 对于Safari User Agent Stri
  • 如何在没有 SDK 的情况下在 Objective C 中为 S3 创建预签名 URL?

    我正在构建一个 mac 应用程序not使用 AWS iOS 开发工具包 我尝试构建的 GET 请求应遵循以下通用格式 Authorization AWS AWSAccessKeyId base64 hmac sha1 VERB n CONT
  • 贴纸包会在模拟器上使 iMessage 崩溃,但在 iPhone 上不会崩溃

    按照 Apple 的在线说明和视频在 Xcode 中创建了一个贴纸包 所有图像的尺寸均正确且远低于文件大小阈值 如果我在我的实体 iPhone 上构建并运行贴纸包 一切都会完美运行 如果我在模拟器上构建并运行贴纸包 对于任何模拟的 iPho
  • 将 NSData 转换回音频文件

    我已经转换了我的 caf音频文件到NSData使用以下代码行对象 NSData audioData NSData dataWithContentsOfFile MyRecorderFilePathURL path options 0 err
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • TableViewController 的 viewDidLoad 未触发

    我一直在关注这个tutorial http www appcoda com ios programming sidebar navigation menu 有一个滑出式菜单 我添加了一个 TableViewController 它将显示文章
  • iPhone:UIApplication WillResignActiveNotification 从未被调用

    我正在视图控制器中播放视频 当用户按下硬件主页按钮并且当前正在播放视频时 应用程序崩溃并显示EXC BAD ACCESS在模拟器中 我读到我应该使用applicationWillResignActive停止视频播放的消息应该可以解决崩溃问题
  • 如果我使用自定义 UITableViewCell,是否需要设置 heightForRowAtIndexPath?

    如果我使用自定义 UITableViewCell 是否需要设置 heightForRowAtIndexPath 在我的 NIB 中 我已经设置了单元高度 当我覆盖 heightForRowAtIndexPath 时 单元格的内容不会出现 即
  • 编码时捕获 NS_AVAILABLE_IOS

    我知道如何更改支持的最低操作系统IPHONEOS DEPLOYMENT TARGET 我目前正在 Xcode 4 5 下进行开发并使用 iOS 6 0 SDK 我想做的是找到一种方法 每当我使用标记的代码时在编译中抛出警告 NS AVAIL
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • 处理 UICollectionView 中的点击手势

    由于我无法使用任何框架来创建相册 因此我尝试使用 Collection View 创建自己的相册 但我一开始就陷入困境 我的目标是将网络服务中的所有图像显示到我的集合视图中 因为所有图像都已显示 下一步是当有人点击任何单元格时 我可以在新视
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模
  • 为什么 Objective-C 允许在方法定义末尾使用分号? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 实现文件中方法名后面的分号 https stackoverflow com questions 5678360 semicolon after the method name
  • 如何为 UIImageView 随机化器实现滑动手势

    我一直在浏览大量的教程和问题 但似乎找不到我要找的东西 我有一种感觉 我只是错过了一个简单的步骤 我仍在学习诀窍 所以请承受和我一起做这个 我正在 xcode 4 3 3 上制作图像随机化器 并且我已经能够使用按钮来随机化图像 但我希望它能
  • 更改 iOS7 中 UIAlertView 的字体大小

    我想更改alertView中消息文本和标题文本的字体大小 苹果网站上没有任何文档谈到这一点 但苹果在其子类注释中表示 UIAlertView 类旨在按原样使用 请参考以下链接 https developer apple com librar

随机推荐