ope*_*rog 16 iphone nsobject ipad ios performselector
我需要一种保存方式来说:"iOS,我希望这个方法尽快执行,但不要在这个循环迭代中执行.最早在下一个,但请不要在这一个.谢谢."
现在我总是这样做:
[self performSelector:@selector(doSomethingInNextRunLoop) withObject:nil afterDelay:0];
[self doSomeOtherThings];
Run Code Online (Sandbox Code Playgroud)
假设-doSomeOtherThings将始终执行
-doSomethingInNextRunLoop.
文件说:
指定延迟0不一定会导致选择器立即执行.选择器仍在线程的运行循环中排队,并尽快执行.
所以基本上可能会发生这种方法被立即调用,好像我刚刚发送了一条直接消息,导致-doSomethingInNextRunLoop之前被执行-doSomeOtherThings?
我怎样才能确保它会被调用asap但是从来没有在同一个运行循环迭代中被调用?
澄清措辞:对于运行循环,我指的是主线程,以及所有方法必须返回的迭代,直到线程再次为新事件准备好.
如果你担心苹果可能会在某一天特殊情况下延迟0,你总是可以指定延迟1e-37左右.尽管performSelector:withObject:afterDelay:可以轻松读取文档,以确保选择器始终安排在下一次运行循环迭代中.
如果你担心Apple有朝一日的特殊情况延迟会低于某个任意的下限,你可以尝试使用NSRunLoop performSelector:target:argument:order:modes:,文档明确指出这将安排执行下一次运行循环的执行.
使用GCD(Grand Central Dispatch)非常简单:
dispatch_async (dispatch_get_main_queue (), ^{
NSLog (@"This stuff runs in the next iteration of the main run loop");
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3524 次 |
| 最近记录: |