我对 NSRunLoop 方法的正确用法有疑问runMode:beforeDate
。
我有一个辅助后台线程,用于处理收到的委托消息。
基本上,我有需要在后台线程上执行的进程密集型逻辑。
所以,我有 2 个对象,ObjectA
并且AnotherObjectB
.
ObjectA
初始化AnotherObjectB
并告诉AnotherObjectB
开始做这件事。AnotherObjectB
异步工作,因此ObjectA
充当AnotherObjectB
的代表。现在,需要在委托消息中执行的代码需要在后台线程上完成。所以,对于ObjectA
,我创建了一个 NSRunLoop,并做了这样的事情来设置运行循环:
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (aCondition);
在aCondition
“完成委托消息”中的某处设置的位置。
我正在收到我所有的委托消息,并且正在该后台线程上处理它们。
我的问题是:这是正确的方法吗?
我问这个的原因是因为这[NSDate distantFuture]
是一个跨越几个世纪的日期。所以基本上,runLoop 直到“distantFuture”才会超时——在那之前我绝对不会使用我的 Mac 或这个版本的 iOS。>_<
但是,我不希望运行循环运行那么久。我希望在调用最后一个委托消息后立即完成运行循环,以便它可以正确退出。
另外,我知道我可以设置重复计时器,间隔更短,但这不是最有效的方式,因为它类似于轮询。相反,我希望线程仅在委托消息到达时工作,并在没有消息时休眠。那么,我采用的方法是正确的方法,还是有其他方法。我阅读了文档和指南,并根据我对它们的理解进行了设置。
但是,如果不能完全确定,最好向这个很棒的社区征求意见和确认。
所以,提前感谢您的所有帮助!
干杯!