问题标签 [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.
iphone - OpenFlow 中的 AFGetImageOperation
为 OpenFlow 实现 AFGetImageOperation 的正确方法是什么。
aImage.imageURL
有请求的图像 URL 但不确定检索到的图像存储在哪里?
谢谢
objective-c - ios 3 上 [NSOperationQueue mainQueue] 的替代方案
ios3上这些操作的等价物是什么
multithreading - NSOperation 会产生一个新线程吗?
很简单,线程(或 NSThread)和 NSOperation 之间是否存在一对一的连接?或者它是否抽象出一个操作是一种可以在后台被多个线程拾取和运行的任务?
objective-c - 释放实现 NSOperationQueue 和异步请求的对象的正确方法
我正在努力寻找解决问题的方法,
我有一个下载类来处理对我的 api 的调用,这些调用被添加到 NSOperationQueue。每个呼叫都分配了一个已完成和失败的通知程序,该通知程序在呼叫完成或失败时发布。然后我可以在我的视图控制器中优雅地处理请求的完成/失败。
我遇到的问题是,分配/初始化/释放我的下载类的正确方法是什么。我的第一种方法是这样的:
每次我需要运行请求时,alloc 都会初始化下载类的新实例,然后我可以拥有该类的唯一实例,该实例具有唯一的完整和失败通知程序以及我希望的其他参数。我用这种方法遇到的问题是何时/如何释放对象。我不能简单地调用获取请求,然后在同一个调用中释放对象,因为下载调用有队列要完成和通知要发布,我知道下载类的实例何时完成它的调用,因为通知,我只是不知道从另一个函数释放它的正确方法。例如:
然后我在哪里发布下载,并确保我发布了正确的实例,downloadLists 可能会被快速连续调用 (n) 次。
我的另一种方法是使用单例下载,这很好,直到我需要将用户信息添加到通知中,这当然会因为从不同地方调用的单例类而变得混乱。
任何帮助将不胜感激,这里是 downloadPOST 功能供您参考:
iphone - NSOperation 在后台完成,尝试通知主线程,视图不再存在。碰撞
我有一个不在主线程中运行的 NSOperation。它是从 UITableViewController 生成的。操作完成后,由于某些数据已更改,我想重新加载 tableview。我已经为后台设置了一个委托,以便在完成时通知。完成后,我使用 performSelectorOnMainThread 在主线程上专门调用 reloadData 的包装器。
在大多数情况下,这很好用,但是,原始(编辑)tableViewController(/编辑)被释放并且我得到僵尸调用的可能性为非0。
所以问题分为两部分:
- 是否可以在不保留对象的情况下从后台线程获得委托?
- 这只是一个糟糕的设计吗?我应该改用 NSNotifications 吗?在这种情况下,这会是通知的首选方法吗?
提前致谢。
macos - 我的 NSOperation 子类中的 main 没有被调用
我将 NSOperation 子类化并实现了 main 方法。当我将它添加到 NSOperationQueue 时,它没有被调用。我将它与确实 有效但看不出问题所在的示例代码和示例项目进行了比较。请问有没有人遇到过这个问题,请问是什么原因造成的?
在疯狂地寻找问题之后,我决定从头开始,重建我的课程并在每一步测试它。在标题中,我将它声明为 NSOperation 的子类。在实现文件中,我实现了 main 并且只放了几行sleep(3)
:NSLog..;
. 都好。当我开始添加属性,甚至声明委托等时,每个步骤都有效。
最后,在主体部分,我将代码使用 NSDirectoryEnumerator。突然间,main 根本没有被调用。不仅如此,当我把那个代码拿出来时,它仍然不起作用!!我尝试重新启动 XCode 4,重新启动我的机器(不是我知道为什么这些可能会有所帮助,但我已经没有想法了),但都无济于事。
任何线索都将不胜感激。谢谢。
更新:我(再次!)从头开始,但这次我以不同的顺序组装零件......现在它可以工作了!但是,如果无论如何我做错了什么并且这次我很幸运,这是@Andrew建议的@interface部分:
cocoa-touch - 这是操作队列完成块的正确用法吗?
我第一次使用 Objective-C 块和操作队列。我正在加载一些远程数据,而主 UI 显示一个微调器。我正在使用完成块来告诉表重新加载其数据。正如文档所提到的,完成块不在主线程上运行,因此表格会重新加载数据但不会重新绘制视图,直到您在主线程上执行某些操作(例如拖动表格)。
我现在使用的解决方案是调度队列,这是从完成块刷新 UI 的“最佳”方式吗?
根据@gcamp 的建议更新,完成块现在使用主操作队列而不是 GCD:
objective-c - Objective C 中的线程
我正在将 cpp 代码移植到 Objective C。我是这个编程的新手。
我必须启动一个线程,该线程正在调用一个名为 timeoutThread 的函数。在一个名为 insert() 的函数中,他们使用 setEvent(m_Thread) 设置事件,在函数 timeoutThread 中,他们通过调用 waitforsingleobject(m_thread,延迟)。在 waitforsingleObject 的正上方,他们通过 setEvent(m_ThreadEvent) 设置另一个事件。并在超时线程函数中做其他事情。我已经创建了一个 NSOperationQueue 并使用 initWithTarget:toTarget:object 调用了该函数。但是我如何设置事件并像它们在 Objective C 的 cpp 中所做的一样通知。
通过一个简单的例子对此进行任何解释对于像我这样的初学者来说都是非常有帮助的。
ios - iOS 3.x 中 GCD 串行调度队列的等价物
Apple 的 Grand Central Dispatch (GCD) 很棒,但仅适用于 iOS 4.0 或更高版本。Apple 的文档说,“[A] 序列化操作队列不提供与 Grand Central Dispatch 中的串行调度队列完全相同的行为”(因为队列不是 FIFO,但顺序由依赖关系和优先级决定)。
在支持 GCD 发布之前的 OS 版本的同时,实现与 GCD 的串行调度队列相同的效果的正确方法是什么?或者换一种说法,在想要支持低于 4.0 版本的 iOS 应用程序中处理简单后台处理(进行 Web 服务请求等)的推荐方法是什么?
core-data - NSOperationQueue 和 NSFetchedResultsController
我使用队列和结果控制器的组合来更新和显示一些核心数据对象。
在我的 uitableviewcontroller 中,我每隔 X 秒调用一次主控制器对象中的方法。
在这个方法中,一个自定义的 NSOperation 对象将被添加到我的主 Q 中。
该操作本身会创建一个新的 managedobjectcontext 并尝试从 Web 下载一些 xml 并尝试更新 coredata 数据库...(此代码有效!)
在我的主控制器中,我收到上下文更改消息,我使用 mergeChangesFromContextDidSaveNotification 合并和更新我的主对象上下文。所有结果控制器都使用这个主对象上下文。
实际上一切正常,但是当我在 NSOperation 中插入一个新对象时,需要 4-6 秒直到 UI 更新并显示这个新对象......此外,UI 块......它不可能滚动或触发其他交互.. .
当我不使用队列并将我的代码下载并更新到我的 uitableviewcontroller 类中的方法中时,我使用它
一切运行良好,没有任何延迟或 UI 冻结...
有人可以向我解释这种行为吗?
谢谢