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

objective-c - NSOperation 和 UIKit 问题

我正在使用从 NSOperation 继承的对象进行下载。我已经阅读了文档,当我的操作完成后,我必须调用

方法。它需要在主线程上调用,因为 UIKit 不是线程安全的,并且文档在这些非线程安全框架案例中说明了这一点。在委托方法中,我正在绘制 pdf 或图像,但是因为它是在主线程上绘制的,所以用户界面在绘制完成之前非常滞后。也许你能建议我一个避免这个问题的好方法吗?

0 投票
0 回答
2245 浏览

iphone - iPhone:使用 NSOperationQueue 时出现内存泄漏

我在这里坐了至少半个小时才发现我的代码中存在内存泄漏。我刚刚使用 NSOperationQueue 用异步方法替换了对(触摸)方法的同步调用。在我对代码进行更改后,Leak Inspector 报告了内存泄漏。使用 NSOperationQueue 的版本有什么问题?

没有 MemoryLeak 的版本

带有 MemoryLeak 的版本(我没有看到任何内容)

当然,触摸方法也没有什么特别之处。只需更改文件的日期。

0 投票
1 回答
689 浏览

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

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

最近的.h

最近的.m

0 投票
1 回答
610 浏览

iphone - NSOperation 在屏幕外位图上下文上创建 UIImage 时内存不足

我有一个具有多个 UIView 子类的应用程序,它们充当 UIScrollView 的页面。UIView 来回移动以向用户提供无缝体验。由于视图的内容绘制起来相当慢,它呈现在一个共享的 CGBitmapContext 上,由 NSOperation 子类的锁保护 - 在 NSOperationQueue 中一次执行 - 包装在 UIImage 中,然后由主线程用于更新内容的意见。

UIView 子类的 updateContentWithData: 在主线程上执行也一样简单

子类的 drawLayer:inContext: 方法只会从 UIImage 中获取 CGImage 并使用它来更新支持层或它的一部分。该过程不涉及保留或释放。

问题是一段时间后我的内存不足。UIView 的数量是静态的。CGImageRef 和 UIImage 被正确地创建、保留和释放(或者在我看来是这样)。Instruments 没有显示任何泄漏,只是可用内存不断下降,上升几次,然后下降甚至更低,直到应用程序终止。在此之前,该应用程序会循环浏览大约 2-300 个上述页面,但我希望在已经快速浏览了一堆页面之后,内存使用率会达到或多或少稳定的已用内存水平,或者,因为图像大小高达 3MB,较早耗尽。

任何建议将不胜感激。

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 投票
2 回答
1098 浏览

objective-c - 在父 NSOperation 上执行选择器

我扩展了 NSOperation(称为 A),其中包含其他 NSOperation 的 NSOperationQueue(这是与 A 不同的另一个扩展类,将这些操作称为 B)。当操作 A 正在运行(执行 B 操作)时,当 B 操作上发生某些事件时,我如何在操作 A 上调用特定函数/方法?例如,完成它的每个操作 B 都会在操作 A 返回自身时调用一个函数?

*嵌套的 NSOperation 和 NSOperationQueue(s)

希望这个样机伪代码可以帮助绘制图片。

0 投票
1 回答
273 浏览

iphone - 新线程上的 XML 解析

在我的应用程序中,我想在用户滚动 tableview 并拉下第一个单元格后获取新的 xml 数据。由于数据是按时间顺序加载到 tableview 中的,因此更新的数据将显示在第一个单元格之前。

我想在新线程上运行这个过程,那么最好的选择是什么:

  1. 子类 NSThread 并使用它的实例

  2. 子类 NSOperation 并使用它的实例

  3. 直接使用 NSThread 方法

提前谢谢。

0 投票
1 回答
2405 浏览

objective-c - performSelectorInBackground 和 NSOperation 子类的区别

我创建了一个用于运行深度计数器循环的测试应用程序。我分别使用 performSelectorInBackground 和 NSOperation 子类在后台线程中运行循环函数。

我还使用 performSelectorOnMainThread 在 backgroundthread 方法中通知主线程,并在 NSOperation 子类中使用 [NSNotificationCenter defaultCenter] postNotificationName 来通知主线程以更新 UI。

最初,两个实现都给了我相同的结果,我能够更新 UI 而没有任何问题。我发现的唯一区别是两个实现之间的线程数。

performSelectorInBackground 实现创建了一个线程,并在循环完成后终止,我的应用程序线程数再次变为 1。

NSOperation 子类实现创建了两个新线程并保持存在于应用程序中,并且在 main() 函数中循环完成后我可以看到 3 个线程。

所以,我的问题是为什么 NSOperation 创建了两个线程,为什么它没有像第一个后台线程实现一样被终止?

我有点困惑,无法决定哪种实现在性能和内存管理方面最好。

0 投票
1 回答
556 浏览

cocoa - NSOperation 在传递给委托时导致崩溃

对于 iPhone 应用程序,我使用 NSOperationQueue 来限制对 SQLite 数据库的访问,一次只能进行一个查询。我创建了一个 NSOperation 的子类,在主函数中我有以下内容:

代表方:

我传递的原因self是允许委托访问查询操作的 ID(在每个委托打开多个请求的情况下)和查询结果。

在 的文档中performSelectorOnMainThread:withObject:waitUntilDone:,它明确指出:

“此方法保留接收器和 arg 参数,直到执行选择器之后。”

但是,当委托方法尝试访问参数时,会引发“EXC_BAD_ACCESS”异常。关于为什么的任何想法?

奇怪的是,如果我在对 NSOperation 对象的崩溃引用之前设置断点,调试器允许我查看对象实例和所有参数的值。