首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NSOperation子类中侦听NSNotifications?

在NSOperation子类中侦听NSNotifications?
EN

Stack Overflow用户
提问于 2015-03-05 19:21:22
回答 2查看 180关注 0票数 0

我正在编写一个应用程序,其中有一个在后台运行的长时间运行的服务器同步任务,我想使用NSOperation和NSOperationQueue来完成这个任务。我倾向于这种方式,因为我需要确保一次只有一个同步操作在运行。

我的问题出现了,因为我的架构是围绕NSNotifications构建的;我的同步逻辑是基于这些通知进行的。在我看来,NSOperation逻辑需要打包到main方法中。所以我想知道的是,当收到特定的通知时,是否有任何方法可以让NSOperation完成。我怀疑情况并非如此,因为我还没有偶然发现任何这种用法的例子,但我想我应该在这里请教一下上师。当到达main方法的末尾时,NSOperation是否刚刚结束?

EN

回答 2

Stack Overflow用户

发布于 2015-03-05 20:01:26

NSOperation没有理由不监听主线程上的通知,但要么finish逻辑必须是线程安全的,要么操作必须跟踪其当前线程。

我会推荐一种不同的方法。支持像-finishWithNotification:这样的方法的子类NSOperation有一个监听通知的队列管理器。它可以遍历其操作,完成响应-finishWithNotification:的任何操作。

代码语言:javascript
复制
- (void)handleFinishNotification:(NSNotification *)notification
{
    for (NSOperation *operation in self.notificationQueue) {
        if ([operation isKindOfClass:[MYOperation class]]) {
            dispatch_async(self.notificationQueue.underlyingQueue), ^{
                MYOperation *myOperation = (MYOperation *)operation;
                [myOperation finishWithNotification:notification];
            });
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2015-03-05 19:30:26

如果我没理解错的话,并发NSOperation就是您所需要的。

并发NSOperation适用于长时间运行的后台/异步任务。

NSOperation Documentation

请参阅:子分类附注和操作相关性部分

编辑:(添加更多说明)

基本上,并发操作不会在main方法结束时结束。实际上,并发操作意味着在实际操作完成之前,控件将返回到调用代码。在并发操作的start方法中完成的典型任务是:将操作标记为正在执行,启动异步工作(例如NSURLConnection异步调用)或生成一个新线程来执行大部分任务。然后再回来。

异步任务完成后,将该操作标记为已完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28876666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档