问题标签 [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 回答
2254 浏览

iphone - NSOperations 队列和处理应用程序退出

我即将创建一系列NSOperations 并在队列中运行它们。

它们都是顺序的,一次运行一个。

这些操作将从 Web 获取数据并创建和保存核心数据托管对象。

如何处理应用程序退出的情况?由于操作在分离线程中运行,我怎样才能让主线程等到当前操作“安全”退出?在某些情况下,我很高兴线程(操作)在它们完成之前退出,因为在进一步的应用程序启动时,作业将继续并从中断的地方继续。

非常感谢,

麦克风

0 投票
1 回答
341 浏览

iphone - 当 Core Animation 触发动画时,操作队列是否有帮助?

核心动画使用后台线程。在主线程上执行大量计算时,CA 由于其低优先级线程而停止动画。在这种情况下,操作队列如何提供帮助?

0 投票
1 回答
4389 浏览

iphone - 在后台获取核心数据

我有一个带有表格视图的导航视图,当单击一行时,行 indexPath 被传递到下一个视图。

在 Details 视图 viewDidLoad 中,我从 Core Data 获取数据。我使用来自应用程序委托的获取

[appDelegate loadItem:i];

如您所见,我只传递了一个带有行号的整数。

问题是:我怎样才能在另一个线程中进行这个调用过程。(在后台)我需要这个,因为有时获取的结果太大,所以处理需要 3 秒延迟推送详细信息视图。

我需要在三秒钟内显示一个活动指示器,因此我需要将 Fetch 放在另一个线程中,以便能够在处理 fetch 时将 UI 用于指示器。

我想要最简单的方法,因为我是新手。发布一些代码会很棒。或链接:)

0 投票
2 回答
1123 浏览

iphone - 我们如何在 MKMapView 动画或移动时暂停添加注释。[iPhone SDK 3]

我有一个 MKMapView,另一个类有一个向 MKMapView 添加注释的线程。

但问题是, MKMapView.annotations 是非原子的。因此,当其他类正在添加注释时......如果用户不移动地图的可见区域,它看起来没问题。但是,如果您继续移动它,并且此时其他类正在向地图添加注释,则应用程序崩溃。因为在地图制作动画期间数组发生了变异。

我制作了 NSOperationQueue,并将每个添加注释作业添加到队列中。

然后每当地图的区域改变时,暂停 NSOperationQueue.. 然后在区域改变完成后重新启动它。

我可以摆脱大多数崩溃......但它仍然偶尔发生。

任何想法?

0 投票
2 回答
382 浏览

iphone - 在导航栏上切换视图时,如何安全退出 NSOperationQueue 线程而不会出现 EXC_BAD_ACCESS 错误

我正在使用 UITableView 来显示一些字符串消息,并且我使用 NSOperationQueue 来保存一个自定义的 NSOperation,它在后台线程中获取消息。成功获取一条消息后,自定义的 NSOperation 会通知 UITableView 控制器显示它。

如果我在加载所有消息后单击导航栏上的后退按钮以从 UITableView 切换到其他视图,则一切正常。但是,如果我在某些消息仍在加载时单击后退按钮,则会抛出 EXC_BAD_ACCESS。我检查了在自定义 NSOperation 使用performSelectorOnMainThread方法通知 UITableView 控制器时发生的异常。听起来目标 UITableView 控制器在视图切换后并非无效,但我认为导航控制器将保存视图控制器实例。我可以知道如何解决这个问题吗?谢谢。

自定义操作在 UITableView 控制器中初始化,代码如下:

自定义的 NSOperation 类将使用以下代码更新 UITableView:

0 投票
1 回答
648 浏览

iphone - OpenFlow :: 如何流式传输图像

我正在尝试在 iPhone 应用程序中使用 OpenFlow ( http://apparentlogic.com/openflow/ ) 从我的服务器流式传输文件。我怎样才能做到这一点?我应该使用 NSOperationQueue 吗?

到目前为止,我已经能够: * 使用本地文件 * 使用他们来自 Flickr 的演示(它使用 Flickr API 和库)

加载本地图像的代码:

0 投票
2 回答
3623 浏览

ios - NSOperation 阻止 UI 绘画?

我对使用NSOperation和绘图有一些建议:

我有一个主线程创建我的NSOperation子类,然后将其添加到NSOperationQueue.

NSOperation做了一些繁重的处理,它打算在它的 main() 方法中循环几分钟,不断处理一些工作,但现在我只有一个 while() 循环,里面有一个 sleep(1),它被设置为 go大约只有 5 次(用于测试)。

产生它的主(原始)线程NSOperation负责绘制到视图并更新 UI。

我打算让 NSOperation 线程使用通知来告诉主线程它已经完成了一些处理,目前这个通知在每次通过它的 while() 循环时发送一次(即每秒一次,因为它只是在做睡眠(1))。主线程(视图)注册以接收这些通知。

通知立即进入主线程,看起来是异步的,看起来还不错。似乎两个线程都按预期运行......也就是说 - 同时运行。(我使用 NSLog() 只是为了大致检查每个线程何时发送和接收通知)。

当视图收到通知并调用其处理程序方法时,我只需增加一个整数变量,并尝试将其绘制到视图(当然作为字符串)。在测试中,drawRect: 中的代码将这个整数(作为字符串)绘制到屏幕上就好了。

但是:这是我的问题(抱歉,这里花了一点时间):当主线程(视图)收到来自 NSOperation 的通知时,它会更新这个测试整数并调用 [self setNeedsDisplay]。但是,在 NSOperation 完成之前,视图不会重绘自身!我预计 NSOperation 作为一个单独的线程将无法阻止主线程的事件循环,但似乎这就是正在发生的事情。当 NSOperation 完成并且它的 main() 返回时,视图最终会立即重新绘制自己。

也许我没有NSOperation正确使用。我在“非并发”模式下使用它,但尽管有这个名字,我的理解是它仍然会产生一个新线程并允许异步处理。

非常感谢任何帮助或建议,如果您想查看一些代码,请告诉我。

0 投票
1 回答
342 浏览

cocoa - ASIHTTPRequest 在同步模式下吞噬了我的 NSOperation 变量

嘿,我一直在与这个问题作斗争一段时间。也许我在多线程知识中缺少一些东西,但这就是发生的事情。当我创建一个 nsoperation 队列时,所有分配的变量在“[request startSynchronous];”之后都会被清除。行代码。这就是我所说的:

对象在这里仍然存在

[请求开始同步];

然后对象消失在这里!

我确信这与原则理解上的差距有关,但我几天来一直在重新安排代码,但没有成功。

...

0 投票
1 回答
614 浏览

iphone - 多个 NSURLConnection 会导致性能延迟吗?

我做了一个多文件下载器。我使用 NSOperationQueue 实现了 NSURLConnection。

NSOpetationQueue 有许多 NSURLConnection 操作。

并将 MaxConcurrentOperationCount 设置为 10。

我以为我的代码是对的,但是运行项目后,它是错误的。发生了一些连接错误。文件网址是正确的。并且文件下载完成。但下载文件,出现“超时”错误。

太严重了。我用 8 个文件对其进行了测试,总大小只有 3M。但是总下载时间是2分钟~!!!

一个文件下载只需几秒钟。(2~3 s) 但多文件下载出现很多负担!!(2分钟)

我不知道这是为什么...有人知道是什么原因吗?

0 投票
3 回答
1452 浏览

objective-c - 当 MaxConcurrentOperationCount > 1 时,我得到 EXC_BAD_ACCESS

您好,我正在使用 NSOperationQueue 在后台下载图像。我创建了一个自定义 NSOperation 来下载图像。我将图像放在表格单元格中。问题是如果我执行 [operationQueue setMaxConcurrentOperationCount: 10] 并向下滚动几个单元格,程序会因 EXC_BAD_ACCESS 而崩溃。每次它在桌子的同一个地方崩溃。一个接一个地有 3 个单元,它们是同一家公司的,并且具有相同的徽标,因此基本上它应该下载图像 3 次。每隔一段时间它工作正常。

这就是我处理下载图像的方式。如果我在上面的函数中注释掉 [delegate didFinishDownloadingImage: self]; 它不会崩溃,但它当然没用。