什么时候会触发NSFireDelayedPerform

Pei*_*Pei 2 cocoa objective-c ios

我试图弄清楚NSFireDelayedPerform什么时候会被触发,这是什么基本规则.但我找不到任何关于此的文档或源代码.任何人都可以提供一点提示吗?

pai*_*ego 6

我也遇到过这种情况,并且相信只要在指定的延迟(低于2秒)后执行选择器,就可以调用它.

[foo performSelector:@selector(f1) withObject:nil afterDelay:2];
Run Code Online (Sandbox Code Playgroud)

下面是主线程上的堆栈跟踪,其中应用程序在延迟20.060秒后被杀死.尽管指定了2秒的延迟,但系统需要更长的时间(超过10秒)来执行此选择器.这意味着系统使用NSTimer来使用afterDelay参数处理performSelector调用.不幸的是,它似乎可能将调用放在主线程的事件队列中,然后等待指定的延迟(或更多):

6基础0x35bfaa6a __NSFireDelayedPerform

7 CoreFoundation 0x3add45dc CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 12