[self performSelector:@selector(doSomething) withObject:nil afterDelay:0];
我在那个选择器上阅读了the documentation.相关的行似乎如下:
@H_502_6@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.
我无法确定为什么要编写[self performSelector:@selector(doSomething)withObject:nil afterDelay:0],而不是仅仅编写[self doSomething].在我看来,延迟为零意味着应该立即进行呼叫.显然我遗漏了一些东西,框架作者不太可能随意选择这种方法.其他StackOverflow答案也没有说明这一点.是否使用了“performSelector”选择器,因为doSomething选择器本身是异步的,并且调用是在异步回调中进行的?
我确实发现another link建议如下:
@H_502_6@It’s interesting to note that using performSelector with afterDelay will also let the warning [viz,a compiler warning] go away: …
[self performSelector:aSelector withObject:nil afterDelay:0.0];
那么作者是否使用此代码仅抑制编译器警告?如果是这种情况,那么最好通过clang push / pops来抑制警告,如this thread所示.
如果有人有一个有说服力的解释为什么作者使用… afterDelay方法,我将不胜感激.谢谢.
编辑2012年10月22日:我不相信@rmaddy给出的唯一答案完全适用于我的情况,但它仍然是一个很好的答案,所以我会接受它.我会密切关注这个问题,如果我发现任何新的东西,我会回来.谢谢. J.Z.