我需要一种保存方式来表示:“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/