问题标签 [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.
iphone - iPhone 上的 NSOperation
我一直在寻找一些具体场景,NSOperation
说明 iPhone 何时是在应用程序中使用的理想工具。据我了解,这是围绕编写您自己的threaded
代码的包装。我还没有看到任何使用它的 Apple 演示应用程序,我想知道我是否错过了一个很棒的工具而不是使用NSThread
.
这里的理想解决方案是描述一个用例场景NSOperation
以及如何使用它来解决您的问题。
iphone - 当 NSOperationQueue 完成所有任务时获取通知
NSOperationQueue
有waitUntilAllOperationsAreFinished
,但我不想同步等待它。我只想在队列完成时在 UI 中隐藏进度指示器。
实现这一目标的最佳方法是什么?
我无法从我NSOperation
的 s 发送通知,因为我不知道哪一个会是最后一个,并且[queue operations]
在收到通知时可能还不是空的(或更糟糕的是 - 重新填充)。
objective-c - 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库
与这个 SO question相关,我想将数据加载放在后台。
但是,我收到“按顺序调用的库例程”错误。
在这个 SO 线程中说方法是使用 NSOperation,但是查看网络上的示例我不知道如何解决这个问题。
我与单例模式共享一个 sqlite 连接:
所以更难打开两次相同的分贝......
有任何想法吗?
编辑:
我确认错误在于调用 sqlite。我使用 FDBM 作为瘦包装器来调用它。
我正在运行 2 个线程:用于加载数据的主任务和后台任务。我这样运行它:
db 接口的代码位于http://code.google.com/p/chibiorm/source/browse/#svn/trunk/src — 特别是 Db.h/m 是唯一与 fdbm/ 接口的单元sqlite。
尝试从 FDBM 调用 sqlite 函数时发生错误。
例如发生在这里:
这调用了 FDBM 代码:
iphone - NSOperation + Objective-C 类别 = 坏主意?
我为 iPhone 应用程序的UIImageView类设置了一个 Objective-C 类别。该类别的任务是帮助通过内存/磁盘缓存异步加载基于 URL 的图像。
现在,在 UIImageView+Cache.m 中,我可以访问NSOperationQueue,以便启动加载线程。我创建了一个NSOperation派生对象,使用图像 URL 和目标 UIImageView 进行了初始化,并在操作完成后在目标上执行了一个选择器。在 selector 方法中,我们设置了新加载的图像(或者,如果没有找到,我们设置一个替代的占位符图像),我们就完成了!
这工作正常,直到 UIImageView在 NSOperation 完成之前被删除。例如,我的 UI 中有一个上一个/下一个分段控件,它会导致这些 UIImageViews 被删除并重新添加(它们是在应用程序中查看的更大“项目”的一部分),因此很容易点击这些快速连续。
因此,如果您决定在所有图像加载之前开始敲击 - KABLAM!不开心的线程有一个无效的对象并且不知道它。:(
我能找到的最有助于缓解这种情况的方法是 NSOperation 的cancel和isCancelled方法,但您无法跟踪类别中要取消的操作对象,因为 - 如果我理解正确 - 类别无法将 IVAR 添加到对象!
也许这意味着类别在这里不是一个好主意?(呜咽:“但我喜欢分类!哇!”)
建议赞赏!
iphone - Cocoa - 从 NSOperation 返回信息
我有一个使用网络服务从服务器获取数据的 iPhone 应用程序。我将对网络服务的每个调用都放在一个 NSOperation 子类中,以便它可以被线程化。我的问题是,从已完成的 NSOperation 子类传回信息的推荐方法是什么。我目前正在我的主要方法结束时发送一个 NSNotification ,并且任何等待 NSOperation 完成的代码都订阅了通知。然后我将使用 NSNotificationWithName:Object: 的对象部分从操作中传回信息。
我不确定是否有更好的方法来做到这一点。我听说过键值编码,然后我可以使用键值观察来检测操作的 isFinished 属性何时更改,但我不确定最佳实践是什么。
我还试图确保我的应用程序是线程安全的,我认为这不会是一个问题,只要我的通知是在 main 方法结束时发出的,因此通知中的对象将不再被使用在线程中,因为它会结束。
最后,我这样调用通知:
iphone - 使用 NSOperation 进行线程处理会创建太多对象
我有一个进行 SOAP 调用的应用程序。为了防止 UI 阻塞,我们将每个 SOAP 调用放入 NSOperation 的子类中。这很好用,但是我们有大量不同类型的 SOAP 调用。因此,如果我们使用 3 个 WSDL,每个 WSDL 有 10 个端口或操作,那么我们在 SOAP 中有 30 个不同的调用,如果我们使用 NSOperation 将每个调用放在一个线程中,我们最终会得到 30 个 NSOperation 子类。
这可能不是一件坏事,但我们正在尝试创建一个可重用的库,因此每个 WSDL 都有一个对象来封装调用。这很好,因为我们使用的是 WSDL2ObjC,它封装了所有逻辑。但是在这么多的 NSOperations 中有一个很好的 api 来包装调用似乎很奇怪。此外,我们正在 api 本身中进行线程化,以便调用者可以按照他/她认为合适的方式使用它。
任何建议都会很棒。
iphone - 如何在 NSOperation 中执行异步 NSURLConnection?
我想在后台线程上的 NSOperation 内执行异步 NSURLConnection 。
(这是因为我在数据返回时对数据进行了一些非常昂贵的操作,这些操作希望在数据进入和后台时完成)
这是我的第一次尝试:
在我的 AppDelegate 中:
这是我的操作:
当它运行时,我在日志中看到以下消息:
这个事件发生在最后 [self didChangeValueForKey:@"isFinished"]; 这表明我设置 NSOperation 错误。
iphone - 使用 NSOperation 时的 EXEC_BAD_ACCESS
这与我遇到的问题几乎相同,只是代码非常不同:http: //www.cocoabuilder.com/archive/message/cocoa/2009/3/24/233015
我想将一些处理卸载到 NSOperation,将文件名作为 NSOperation 加载和解析的引用传递。EXEC_BAD_ACCESS
该应用程序在进入时崩溃-(void)init
。
这是我启动操作的方式:
在剥离了我的 NSOperation 中的所有内容后,我仍然以崩溃告终。以下代码崩溃:
这是崩溃的汇编程序输出(我不是忍者,无法理解它所说的内容)。这发生在 __opLock 中的 addOperation 之后
有任何想法吗?:)
cocoa - 如何将 NSProgressIndicator 绑定到 NSOperation 的属性?
我有一个反映NSOperation
. 我应该如何将 绑定NSProgressIndicator
到NSOperation
的进度属性?
objective-c - Snow Leopard 上的 NSOperationQueue 有多轻量级?
我正在使用一些代码,这些代码使用各种回调执行一堆异步操作;Snow Leopard 使用积木和 GCD 让这一切变得异常简单。
我是这样打电话NSTask
的NSBlockOperation
:
这种方法非常有效。这就像魔术一样,只要我的回调正确处理并发。
现在,我希望能够合并其中的一些调用;这是在模型对象的“刷新”方法中,可能需要很长时间才能完成。让用户点击刷新按钮不应该占用机器等等。
我可以在这里看到一个实施困境。我可以创建一大堆队列——每种呼叫类型一个——并将它们的并发操作计数设置为 1,然后-cancelAllOperations
在需要进行新呼叫时进行呼叫。
或者,我可以对当前正在发生的调用进行更多的手动簿记,并为每个模型对象管理一个队列(就像我正在做的那样),或者我可以更进一步并使用全局队列。
有多重NSOperationQueue
?创建大量队列是一个糟糕的架构决策吗?有没有更好的方法来合并这些任务?