iphone - 如何快速调用方法但最早在下一次运行循环迭代中?

标签 iphone ios ipad nsobject performselector

我需要一种保存方式来表示:“iOS,我希望此方法尽快执行,但不在本次运行循环迭代中。最早在下一次执行,但请不要在本次执行。谢谢。”

现在我总是这样做:

[self performSelector:@selector(doSomethingInNextRunLoop) withObject:nil afterDelay:0];
[self doSomeOtherThings];

假设 -doSomeOtherThings 总是先执行 -doSomethingInNextRunLoop.

文档说:

Specifying a delay of 0 does not necessarily cause the selector to be performed immediately. The selector is still queued on the thread’s run loop and performed as soon as possible.

所以基本上可能会立即调用该方法,就好像我刚刚发送了直接消息一样,导致 -doSomethingInNextRunLoop-doSomeOtherThings 之前执行?

我怎样才能绝对确定它会被称为 a.s.a.p.但从来没有在同一个运行循环迭代中?

为了澄清措辞:对于运行循环,我指的是主线程,以及所有方法必须返回的迭代,直到线程再次为新事件做好准备。

最佳答案

如果您担心 Apple 有朝一日可能会在特殊情况下将延迟设为 0,您始终可以将延迟指定为 1e-37 左右。尽管 performSelector:withObject:afterDelay: 的文档可以很容易地读取以保证选择器将始终安排在下一个运行循环迭代中。

如果您担心 Apple 有朝一日可能会在特殊情况下延迟小于某个任意下限,您总是可以尝试使用 NSRunLoop 的 performSelector:target:argument:order:modes:文档明确指出将安排运行循环的下一次迭代执行。

关于iphone - 如何快速调用方法但最早在下一次运行循环迭代中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7096203/

相关文章:

ios - 使用对象对混合数组进行排序

ios - 如何在 UICollectionViewCell 中设置 UILabel

ios - 如何仅在纵向模式下修复少数 Controller 的方向?

iphone - 无法使用ALAssets返回的路径URL加载图像

iphone - 将最小日期设置为 UIDatePicker

iPhone 用户界面设计

ios - Сocoapods 中继 URL 无法下载

iphone - 在 IOS 中使用 native 控件进行本地化

iphone - 如何使用注释降低 MKMapview 的缩放级别?

iOS Deeplink 到保留 View Controller 堆栈的特定 ViewController