问题标签 [nsoperation]

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 投票
3 回答
673 浏览

iphone - What to do in a separate thread?

So I've read some stuff about multithreading and NSOperation and wondering how I can use that to improve my app. Using Instruments I have isolated a few places where my app could definitely use a speed improvement. My question is, are these kinds of things suitable for another thread using NSOperation?

Drawing a view: I have a rather complex view that is taking a little time to draw. When it's drawn I experience some lag.

Allocating and playing audio: I'm using AVAudioPlayer to play some background music. When I allocate it, again some lag.

Calculations: I'm also performing some calculations and doing some comparisons with lots of integers.

I strive for the best possible performance for my app, so what would you do?

0 投票
1 回答
737 浏览

objective-c - NSOperation 最佳实践,响应取消

在我的 NSOperation 子类中,我在子类方法中的长循环顶部或任何长方法(核心数据提取、数组排序等)之前检查取消main。请参阅下面的示例。

除了排干游泳池并尽快退出该方法之外,我还应该做些什么吗?

0 投票
2 回答
868 浏览

iphone - 关于在 iphone OS 中使用 NSOperationQueue 和 NSOperation 的问题

我使用 NSOperation 执行任务:使用 NSURLConnection 下载一些文件,然后合并占用大量 CPU 和内存的文件
我需要在新/后台线程中执行任务
所以我将这些任务添加到 NSOperationQueue 并设置 maxConcurrentOperationCount = 2
但结果是在合并文件时它会阻塞主线程(UI 暂时没有响应),似乎没有在新/后台线程
中执行如何让它按我预期的那样运行?

0 投票
2 回答
424 浏览

iphone - 内存管理导致的崩溃问题(使用 Core Data)

我正在使用核心数据。从那里我正在检索 10000+ 数据

使用 NSOperation,我在 UITableView 上显示大量数据。

但正如我在 XCode Instruments 中看到的那样,我的内存使用量不断增加

这就是原因,崩溃活动存在于设备中而不是模拟器中

有人想对此发表评论吗?

0 投票
1 回答
754 浏览

objective-c - 核心数据:合并添加到背景上下文中的孩子很时髦

背景

  • 多线程核心数据应用程序

  • NSTreeControllerNSOutlineView带有绑定

  • 在背景上下文的 NSOperation 中创建子对象

  • 使用合并到主要上下文中mergeChangesFromContextDidSaveNotification

数据模型

问题

  • 如果我将 20 个子对象创建操作排队,一旦合并完成,我在大纲视图中只看到大约 10-15 个子对象。

  • 如果我将最大并发操作数设置为 1,它会完美运行,我会看到 20 个孩子。

问题

我想做的事是不可能的吗?我可以看到核心数据可能如何难以成功地进行合并。还是我的代码有问题?

代码

JGGroupController

JGAddChildrenObjectOperation - NSOperation 子类

0 投票
2 回答
701 浏览

multithreading - CoreAudio 和 Threads,怎么做?

我可以为 AU 回调(在 C 中)设置一个单独的线程吗?如何 ?如果是这样,哪些线程方法最适合 CoreAudio?NS线程?NSOperationQueue?GCD?还有什么?

非常感谢。

0 投票
1 回答
586 浏览

objective-c - NSOperation 不会产生新线程?

我有一个 NSOperationQueue,里面有很多 NSOperations。我想确保代码的特定部分不会并行执行。我使用这样的 NSLock 对象:

不幸的是,我收到以下错误,而不是阻塞“锁定”调用:

-[NSLock 锁定]: 死锁 ('(null)')

经过一番调查,我注意到所有 NSOperations 似乎都在同一个线程中运行。在记录线程 ID 后,我得出了这个结论:

所有操作似乎都在同一个线程中运行。即使它们作为操作并行运行。

那有意义吗?我有点困惑。我错过了什么吗?你觉得同时使用 NSOperation 和 NSLock 有什么问题吗?(如果不是,那么我确定错误在我的代码中)

0 投票
2 回答
494 浏览

iphone - 在 iPhone 上设计和启动冗长、依赖异步进程的最佳方式?

我正在设计一个 iPhone 应用程序。我有一个非常紧张的过程要开始,在高层次上定义如下:

  1. 用户从 UITableView 中选择项目进行应用内购买。
  2. 用户在 UI 中确认购买。
  3. 异步过程转到 App Store 以检查项目之前是否已购买。如果没有,则购买该项目。然后通知 iPhone 应用程序购买项目成功。(如果它是之前购买的,则应用程序不关心并继续执行第 4 步。)
  4. 然后,该应用程序会转到我的私人服务器以下载所购买商品的数据。
  5. 然后应用程序将数据导入 CoreData。

当然,在流程的每一步,都会向用户报告错误,整个流程就会停止。

我有一个名为 activityIndi​​catorController 的类,它为用户提供了一个不错的 UIActivityIndi​​cator 以及一些指示正在发生的事情的文本。在流程的每一步,activityIndi​​cator 上的标签都必须更新为新状态。

问题/疑虑:

从设计和编码的角度来看,最简单的事情就是在所有步骤中使用一个大的 NSOperation。但是,我担心这可能会在以后妨碍我。我不想走错路,然后不得不撕下一堆代码。

我的直觉告诉我最好实现三个独立的 NSOperations(OpInAppPurchase、OpDownload、OpImport)。但是,每个后续操作不仅依赖于它之前的操作,而且如果一个操作失败,则根本不应该调用其余的 NSOperations。但是,我不确定如何设计/编码。

任何帮助表示赞赏。

编辑:

感谢大家到目前为止的帮助。对于我想要完成的事情,我不希望用户取消操作。但是,我确实希望该应用程序能够取消后续操作。我没有意识到并且只是通过反复试验(即“duh”时刻)发现的是,当一个操作在一个单独的进程中启动时,任何被启动的子操作也在同一个单独的进程中执行.

在阅读了下面链接的 Apple 文章后,我发现 NSInvocationOperation 完全满足我的需求,并且使我不必为每个进程创建单独的 NSOperation 对象。然后,如果失败,它将使用 NSError 对象对主线程进行回调,或者在成功时对主线程进行不同的回调。

也许我会有一些其他的进程,我确实希望用户将来能够取消,我会将 NSOperation 与其他事件一起使用。

0 投票
4 回答
9256 浏览

ios - 哪些任务比 GCD 更适合 NSOperation?

在为 iPhone 编程时,哪些任务更适合使用NSOperation而不是使用?GCD

在我看来,他们似乎在做同样的事情。我看不出一个人的优势和劣势。

0 投票
1 回答
1255 浏览

iphone - NSFetchedResultsController 和 NSOperation

在 aUITableViewController中,我将 anNSFetchedResultsController用于我的数据。一切正常,除了当我开始在一个单独的线程中导入一些对象时:我使用NSOperationQueue我将对象插入到我的ManagedObjectContext. 这发生在单独的视图中。NSFetchedResultsController似乎不喜欢这样并写入控制台:

严重的应用程序错误。在调用 -controllerDidChangeContent: 期间,从 NSFetchedResultsController 的委托中捕获了一个异常。尝试使用 userInfo (null) 为单元格创建两个动画

显然它试图获取新对象。

关于并发的话题,Core Data Programming Guide说了类似ManagedObjectContext为每个线程使用一个,但这听起来相当复杂。

我现在不知道我是否应该真正创建自己的NSOperation子类,在其中创建一个ManagedObjectContext等等,或者是否可以阻止NSFetchedResultsController更新一段时间?

我会很感激一些帮助,法比安