问题标签 [nsoperationqueue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1446 浏览

iphone - NSOperation KVO 问题

我正在使用以下函数在 nsoperationqueue 中的操作完成后通知我的应用程序,以便我可以安排取决于操作结果的任务。我正在使用:

我的问题是,由于分配给这些操作的任务大多是解析数据,如果我尝试点击其他按钮或基本上做一些导致动作的事情,我会得到以下异常:

我完全理解,因为我尝试在主线程上做其他事情,因此对主线程的调用:

未能被执行。但是这个问题的解决方案是什么,因为我希望既允许用户在发出请求后执行任何操作,又在完成分配给操作的任务后执行计划的操作。

真的有可能吗?

提前谢谢。

0 投票
2 回答
775 浏览

iphone - NSOperationQueue 调度线程缓慢?

我正在使用 NSOperationQueue 编写我的第一个多线程 iPhone 应用程序,因为我听说它比管理我自己的线程调度更好并且可能更快。

我正在计算生命游戏板的结果,方法是将板分成单独的部分,让单独的线程计算每个板,然后将它们拼接在一起,对我来说,这似乎是一种更快的方法,即使分割和拼接的开销很大. 我正在为每个板创建一个 NSInvocationOperation 对象,然后将它们发送到 OperationQueue。在我发送了所有的板子后,我坐下来等待它们都完成对 OperationQueue 的 waitUntilAllOperationsAreFinished 调用的计算。

这似乎应该可以工作,并且确实可以正常工作,但是线程被调用得很慢,因此实际上多线程版本的计算时间比单线程版本要长!哦不!我监视了发送到 NSOperationQueue 的 NSOperations 的创建和终止,发现有些只是在 Operation Queue do-diddly-daddlin 中坐了一会儿,然后才被调用。起初我想“嘿,也许队列一次只能处理这么多线程”,然后将队列 maxConcurrentOperationCount 提高到某个任意高的数字(远高于板件的数量),但我遇到了同样的事情!

我想知道是否有人可以告诉我如何将 NSOperationQueue 踢到“超速”状态,以便它尽快调度其队列,或者告诉我发生了什么!

0 投票
2 回答
2496 浏览

iphone - NSOperationQueue 和 ASIHTTPRequest

我正在为围绕ASIHTTPRequest编写的包装类编写测试用例。由于我无法确定的原因,我的测试用例在 ASIHTTPRequest 完成之前以失败告终。

以下是程序流程的工作方式。

  1. 从我的测试用例开始。
  2. 初始化我的 http 引擎对象,指示它创建一个新列表
  3. 创建新的 ASIHTTPRequest 对象并进行设置。
  4. 将请求添加到操作队列。
  5. 等到该队列为空
  6. 检查是否调用了我的委托方法,如果没有调用,则测试失败。

现在,大多数时候一切正常并且测试通过,但有时它失败了,因为在操作队列将控制权返回给我的等待方法之后调用了我的委托方法。

测试用例

引擎代码

0 投票
2 回答
1401 浏览

cocoa - 如何确保 NSOperations 以故障安全的方式执行?

我想要的是

我的应用程序中有一个 NSOperationQueue,在应用程序退出之前处理所有操作至关重要。我在退出时有以下代码,以确保 NSOperationQueue 在退出前为空:

在 NSOperation 在完成之前“冻结”并且阻塞了整个队列之前,我的代码遇到了问题。显然,在这种情况下,我的代码应该抛出一个异常,它现在就是这样。

但是我仍然想防止在操作停止并阻塞队列时发生任何奇怪的事情,从而导致应用程序永远不会退出并且错误不会被捕获。

我的垃圾解决方案

我正在考虑在完成其操作的队列上设置一个超时。然后当它超时时,我可以抛出一个异常,然后问题就会被捕获。

然而,这感觉不对。理想情况下,我不想依赖计时器来确保工作完成。

我的问题

有没有更好的、故障安全的方法来确保我的操作没有冻结?

0 投票
2 回答
3280 浏览

iphone - 将 NSOperation 添加到启动异步 ASIHTTPRequest 的 NSOperationQueue

因此,我尝试在后台线程上执行所有下载数据的 REST 调用,以便 UI 保持响应。

我有一个包含 NSOperationQueue 的视图控制器。我创建了一个导入器类的实例,它是 NSOperation 的子类。在我的导入器的 main() 方法中,我设置了一个 ASIHTTPDataRequest。我创建了请求,然后是启动请求的时候了。

问题:我通过在请求上调用“startAsynchronous”来启动请求时遇到了问题。委托回调永远不会被调用。它就像请求开始,下载它的数据,但从不调用委托回调方法。

我的解决方案:当我同步启动请求时,一切似乎都正常(即回调等)。这是正确的解决方案吗?

为什么同步调用有效,而异步调用无效?我正在模仿苹果“TopSongs”样本的进口商类。

0 投票
4 回答
5920 浏览

objective-c - 如何等到 NSOperationQueue 在单元测试中完成?

问题

  • 我有一个名为 NSOperationQueuelogEntryGeneratorQueue
  • 我想等到队列上的所有操作都完成

如果我使用:

如果添加到队列的线程本身在后台,它工作正常。

但是,如果我通过单元测试运行此代码,它将在主线程上运行。所以我想出了这个“解决方案”,我真的不喜欢:

这总是不太理想,但在 10.5 上一直运行良好。但是,现在我已经将我的项目升级为使用 10.6 SDK,这会中断。

在一项测试中,它实际上在完成之前退出了测试。我不知道为什么 - 我认为这与 NSOperationQueues 在 10.6 中的工作方式不同有关 - 他们现在使用 GCD。

我试过的

我尝试用 sleep 替换 runUntilDate,正如我所想的,这意味着每次测试到这里时都会永远暂停。

我的问题

有没有更好的方法来等待 NSOperationQueue 在主线程上完成?如果没有,我怎样才能让这个代码在 10.6 下工作?

0 投票
1 回答
141 浏览

objective-c - 为什么我的应用程序在单元测试过程中终止?

问题

我运行我的单元测试。在某一时刻,我等待使用:

NSOperationQueue 为空。当我的应用程序到达这条线时,它会立即终止。它与其他测试运行完全相同的行。最近所有测试都运行良好。它有时也会在启动时立即终止我的应用程序。

到底是怎么回事?

0 投票
3 回答
1150 浏览

iphone - 调用 NSOperationQueue 和 dealloc 并导致 App 崩溃的问题

我在队列中创建了一个 NSOperation,如下所示:

这工作正常,但如果视图在操作完成之前弹出应用程序崩溃“EXC_BAD_ACCESS”

我试图通过调用 cancelAllOperations 来取消操作队列,但由于它已经在进行中,它不会阻止应用程序崩溃。docos 说,如果操作正在运行,则由操作来检测它是否已被取消并做出适当的响应,但不太确定我将如何实现它?

有任何想法吗?

0 投票
1 回答
5949 浏览

iphone - 暂停 NSOperation

我有NSOperationQueue一些NSOperationsNSInvocationOperations特别是)。此操作会进行一些计算并相应地更改 UI 元素的状态(当然,通过performSelectorOnMainThread:...),通常使用动画。

我的 UI 有 UINavigationViewController 和一些用于导航到另一个视图的按钮。因此用户可以离开当前视图,而计算/动画仍在进行中。我需要以某种方式阻止这种情况,直到用户返回当前视图。

我发现的唯一解决方案是创建一些线程安全的布尔标志 - 并在所有线程中检查它(例如:while !flag sleep_for_some_time;)。有更好的吗?

0 投票
1 回答
1756 浏览

iphone - 从 ASINetWorkQueue 中删除所有请求

有人知道以持久方式从 ASINetworkQueue 中删除请求的方法吗?重置功能似乎没有完成这项工作。我想要做的是以下