- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 NSRunLoop 的 runMode:beforeDate
方法的正确使用有疑问。
我有一个辅助的后台线程,用于处理收到的委托(delegate)消息。
基本上,我有需要在后台线程上执行的进程密集型逻辑。
所以,我有 2 个对象,ObjectA
和 AnotherObjectB
。
ObjectA
初始化 AnotherObjectB
并告诉 AnotherObjectB
开始做它的事情。 AnotherObjectB
异步工作,因此 ObjectA
充当 AnotherObjectB
的委托(delegate)。现在,需要在委托(delegate)消息中执行的代码需要在后台线程上完成。所以,对于 ObjectA
,我创建了一个 NSRunLoop,并做了类似这样的事情来设置运行循环:
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (aCondition);
aCondition
设置在“完成委托(delegate)消息”中的某处。
我收到了我所有的委托(delegate)消息,它们正在该后台线程上进行处理。
我的问题是:这是正确的方法吗?
我问这个的原因是因为 [NSDate distantFuture]
是一个跨越几个世纪的日期。所以基本上,runLoop 不会超时,直到“distantFuture”——到那时我绝对不会使用我的 Mac 或这个版本的 iOS。 >_<
但是,我不希望运行循环运行那么长时间。我希望运行循环在我的最后一个委托(delegate)消息被调用后立即完成,以便它可以正确退出。
此外,我知道我可以设置重复计时器,间隔更短,但这不是最有效的方法,因为它类似于轮询。相反,我希望线程仅在委托(delegate)消息到达时工作,并在没有消息时休眠。那么,我采取的方法是正确的方法,还是有其他方法可以做到这一点。我阅读了文档和指南,并根据我从阅读中理解的内容进行了设置。
但是,如果不确定,最好向这个很棒的社区征求意见和确认。
因此,提前感谢您的所有帮助!
干杯!
最佳答案
密码是in the docs :
If you want the run loop to terminate, you shouldn't use this method. Instead, use one of the other run methods and also check other arbitrary conditions of your own, in a loop. A simple example would be:
BOOL shouldKeepRunning = YES; // global
NSRunLoop *theRL = [NSRunLoop currentRunLoop];
while (shouldKeepRunning && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);where
shouldKeepRunning
is set toNO
somewhere else in the program.
在你最后一个“消息”之后,取消设置 shouldKeepRunning
(在与运行循环相同的线程上!)它应该完成。这里的关键思想是您需要向运行循环发送一个事件,以便它知道停止。
(另请注意,NSRunLoop 不是线程安全的;我认为您应该使用 -[NSObject performSelector:onThread:...]
。)
或者,如果它适合您的目的,使用后台调度队列/NOperationQueue(但请注意,执行此操作的代码不应触及运行循环;诸如从调度队列/NSOperationQueue 工作线程启动 NSURLConnection 之类的事情将可能会导致问题)。
关于ios - NSRunLoop 的 runMode :beforeDate: - the correct approach for setting the "beforeDate",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314135/
Under the push parsing approach, a push parser generates synchronous events as a document is parsed,
我刚刚开发了一个 Android 应用程序(minSdkVersion 23/targetSdkVersion 29),可以连接到 BluetoothLE 设备以定期获取数据。 现在,在 MainAc
我现在编程了一段时间(初学者),递归函数对我来说是一个有点抽象的概念。我不会说我卡住了,程序运行良好,我只是想知道是否可以在代码中没有 pow 函数的情况下编写函数本身(但仍然完全按照问题的建议进行操
http://www.codechef.com/OCT14/problems/PRLADDU 这是当前的运行比赛。 我不想要它的答案,只是让我知道我的方法是否正确。 我遵循的方法是按交换方式添加人和恐
我是Python线程的新手,作为我写的第一个任务: from twitterHandler import Twitter_User from text_analyzer import text_ana
我不是 DBA,我不知道什么是最好的解决方案。我有两个表, Custumers Table CustomerId (primary key, identity) ... 和 Suppliers Tab
我对Spring和Apache Tika集成感兴趣。 这种方法是线程安全的吗? 我可以从不同的线程安全地调用detect()方法吗? 是否有任何Spring-Tika集成模式? 提前致谢。 最佳答案
这听起来可能是一个新手问题,但我是 iOS 开发新手。 我在我的项目中跟踪了代码,该项目启用了 ARC,但我在执行时遇到错误(访问错误),并且想了解问题的原因并解决它。 按下某些按钮后,将在 MTCl
自从 AsyncTask 自2009年在Cupcake(API 3,Android 1.5)中引入以来,它一直被Android团队一如既往地推广: “Painless threading” “an e
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我一直在为这个 leetcode 问题绞尽脑汁。想知道是否有一种实用的方法可以解决这个问题。我能想到的就是使用可变对象(在 Scala 中)。 给定一个表示为数字链接列表的非负整数,该整数加一。 存储
我一直在为这个 leetcode 问题绞尽脑汁。想知道是否有一种实用的方法可以解决这个问题。我能想到的就是使用可变对象(在 Scala 中)。 给定一个表示为数字链接列表的非负整数,该整数加一。 存储
我正在考虑编写一个函数,该函数使用 calloc 创建一个数组来容纳文件中的数据(目前以字符形式)。据我了解,我的两个最明显的选择是读取所有字符以获得所需的总大小,使用 calloc 分配所需的空间,
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我必须准备一个包含很多字段(大约 100 个)的表单。我可以使用一个大的 HTML\PHP 文件,但为了提高可访问性和轻松访问字段,我宁愿使用选项卡菜单。原始表格(称为临床评估)在逻辑上可以分为 3
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
我想获取所有带有 编辑:如果您不想显式定义 for 循环和 if 语句,请尝试使用 .filter() 和 .match( ): var arr = ["cat", "apple", "window
我正在寻找一种 dojo 工具包方法来跨 iFrame 进行通信。与此处显示的 Julien Lecomte 的 CrossFrame 技术类似的东西 http://www.julienlecomte
问题 我想实现TransparencyChecker Interface,它将验证网络中的任何交易所是否都可以使用来自其他交易所的所有交易信息。 问:TransparencyChecker Infer
我有一个类 ClassA,它调用另一个类(DAO)来获取查询结果。在特定的业务场景下, ClassA 使用查询参数调用 DAO 大约 20,000 次。其中,ClassA 向 DAO 发送了大约 10
我是一名优秀的程序员,十分优秀!