我试图弄清楚NSFireDelayedPerform
何时会被触发,这是什么基本规则。
但我找不到任何关于此的文档或源代码。
任何人都可以提供一些提示吗?
答案 0 :(得分:6)
我也遇到过这种情况,并且相信只要在指定的延迟(低于2秒)后执行选择器,就可以调用它。
[foo performSelector:@selector(f1) withObject:nil afterDelay:2];
以下是主线程上的堆栈跟踪,其中应用程序在延迟20.060秒后被杀死。尽管指定了2秒的延迟,但系统需要更长的时间(超过10秒)来执行此选择器。这意味着系统使用NSTimer使用 afterDelay 参数处理 performSelector 调用。不幸的是,似乎可能将调用放在主线程的事件队列中,然后等待指定的延迟(或更多):
6 Foundation 0x35bfaa6a __NSFireDelayedPerform
7 CoreFoundation 0x3add45dc CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 12
答案 1 :(得分:0)
我会从这里开始
没有提及NSFireDelayedPerform
,但它在某种程度上有意义,因为这通常在CFRunLoop
的背景下看到。
也许你想看看这里:
Is there any guide for iOS runloop mechanism?
或实际上更基本: