问题标签 [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 投票
1 回答
1988 浏览

objective-c - 多个 NSOperationQueues?

我想NSOperations在我的应用程序中使用来解决线程问题。我已经阅读了一些教程,现在我知道我必须做什么,但是我有一个问题。NSOperationQueue每个班级都必须有相同的内容。如果我NSOperationQueue在每个班级都使用新的怎么办。会不会有并发问题?

0 投票
2 回答
2274 浏览

objective-c - NS操作和键值观察

我正在创建一个 MyOperation 对象(继承自 NSOperation)并添加到 NSOperationQueue。然后我在 MyOperation 上做 KVO。我正在使用这种方法

如果完成,则从 MyOperation 获取值。在这种方法中,我使用来自其他类的便捷方法来获取其他数据。

也许在 observeValue... 方法中存在同步问题?

0 投票
1 回答
689 浏览

cocoa - NSOperation 无法在 TableView 上加载数据

我在 NSOperation 中遇到问题。我尝试了很多方法,但它会在屏幕后面运行,但不会让它出现在我的表格视图上。谁能帮我解决这个问题。我是 NSOperation 的新手。

最近的.h

最近的.m

0 投票
1 回答
1365 浏览

iphone - iPhone 上异步 NSURLConnection didLoadResource 后的核心数据阻塞 UI

每次有人触摸 UITableView 中的一行时,我都会启动一系列异步 NSURLConnections,它会下载数据,然后解析并将该数据保存到 Core Data 中。

问题是,当我这样做时,UI 在数据下载期间是响应式的,但是一旦开始解析和保存,UI 就会变得无响应。

NSURLConnection 封装在一个实现 NSURLConnection 协议的类中,当 NSURLConnection 触发 didLoadResource 时,它​​会启动一个处理解析和保存的 DataAdapter 类。我在想这就是我的 UI 阻塞的原因。

以前有没有人处理过这个问题?我有哪些选择?将 DataAdapter 放入 NSOperation?

0 投票
1 回答
2116 浏览

concurrency - iPhone:NSOperationQueue 串行运行操作

我有一个单例 NSOperationQueue 来处理我所有的网络请求。但是,我注意到,当我运行一个特别长的操作(此特定操作至少需要 25 秒)时,我的其他操作在完成之前不会运行。

maxConcurrentOperationCount 设置为 NSOperationQueueDefaultMaxConcurrentOperationCount,所以我认为这不是问题所在。

为什么会发生这种情况?除了产生多个 NSOperationQueues (我不确定是否可行的解决方案,我也不确定这是一个好主意),解决此问题的最佳方法是什么?

谢谢。

0 投票
1 回答
3702 浏览

iphone - NSInvocationOperation 和主线程

想象一下,我有一个视图,其中有一些 UIKit 对象作为它的子视图(例如,UIActivityIndicatorView这没关系)。这个视图还有一个选择器,称为doSomething,它以某种方式管理 UIKit 对象(在我们的示例中,它可以启动或停止指示器视图)。

NSInvocationOperationinitWithTarget:self selector:@selector(doSomething) object:nil. 然后将其添加到NSOperationQueue. 一切正常。

如何?!它应该是一个新线程和非线程安全的 UIKit 对象!为什么没有发现错误(也没有发生崩溃)?

0 投票
2 回答
13357 浏览

iphone - NSThread 与 NSOperationQueue 与 ??? 在 iPhone 上

目前我正在使用NSThread在另一个线程中缓存图像。

交替:

或者,我可以使用NSOperationQueue

有什么理由放弃NSThread吗?GCD 是为 iPhone 发布的第四个选项,但除非有显着的性能提升,否则我宁愿坚持在大多数平台上都可以使用的方法。


根据@Jon-Eric 的建议,我采用了NSOperationQueue/NSOperation子类解决方案。它工作得很好。该类NSOperation足够灵活,您可以根据需要将其与调用、块或自定义子类一起使用。无论您如何创建您的NSOperation,您都可以在准备好运行它时将其放入操作队列中。这些操作既可以作为放入队列的对象,也可以作为独立的异步方法运行,如果需要的话。由于您可以轻松地同步运行自定义操作方法,因此测试非常容易。

自从我提出这个问题以来,我已经在几个项目中使用了同样的技术,我对它保持我的代码和测试干净、有条理和愉快的异步方式感到非常满意。

A++++++++++++ 将再次子类化

0 投票
2 回答
761 浏览

iphone - NSOperation 需要额外的保留

我正在开发一个 iPad 应用程序。它使用 NSOperation 在后台下载一些东西,由 NSOperationQueue 处理。我发现,除非我向 NSOperation 添加保留,否则在执行操作操作后我会崩溃。NSOperationQueue 的 addOperation 表示它保留了 NSOperation,而 NSOperation 本身保留了目标对象。因此,我不明白为什么需要我的额外保留。

这不会阻碍我的进步,除非我试图实现取消异步操作并在其位置创建一个新操作的模式。我还不能在 iPhone OS 4.0 上进行开发(它提供了 waitUntilFinished),所以我需要另一种方法来知道释放我的额外保留是安全的(或者找到一种根本没有额外保留的方法)。

有什么建议么?

0 投票
1 回答
1356 浏览

iphone - NSOperationQueue 似乎在完成时挂起几秒钟

我有一个实现 fromUITableViewDataSourceUITableViewDelegate协议的自定义视图控制器。当我为我的表加载数据时(在我的viewDidLoad方法中),我创建 aNSOperationQueue和 aNSInvocationOperation并将其添加到队列中。我抛出一个活动指示器,然后viewDidLoad退出。

用于操作的方法结束活动指示器动画。

我注意到,当操作完成时,在操作真正完成之前会有 5-7 秒的暂停,即使通过 NSLog 看起来操作的方法返回了。

我曾尝试使用 Instruments 来找出暂停发生的位置,但我无法从中分辨出来,因为我的大部分 CPU 时间都花在了系统库中。

编辑 这是一个缩写版本:

为了清楚起见,队列中的最后一个操作是这样的:

我在日志中看到的是上述日志消息的输出,然后是 5 秒的暂停,最后是带有隐藏指示器的视图。

有任何想法吗?

0 投票
3 回答
2192 浏览

iphone - 从 NSOperation 中取消 NSOperationQueue

我有一些 iPhone SDK 4.0 代码初始化 anNSOperationQueue然后添加三个类(ClassAClassBClassC)以一个接一个地运行。ClassA, ClassB, 和ClassC都是 的子类NSOperation

相关代码如下。

依赖的原因是因为只有在成功完成其操作classB时才应该运行。classA同样,classC仅应在成功完成时运行classB

目前,我很难弄清楚如何防止,例如,如果没有成功完成,则无法classB运行。classA继续这个例子,我想以某种方式[NSOperationQueue cancelAllOperations]从内部唤起,classA但我不知道如何NSOperationQueue从内部classA(这是一个NSOperation子类)获得对父级的处理。这只是我最初的想法,所以我愿意接受任何其他更好的建议来达到同样的结果!

每个类中都有条件代码来确定它们是否已正确完成 - 目前它们只是 NSLogging “成功”或“失败”到控制台以进行调试。在一个完美的世界中,我希望能够NSLog(@"Fail")用一些代码替换每个类中的语句,这将阻止 NSOperationQueue 中的所有其他类运行。

任何建议都将受到欢迎(和赞赏)。