2012-09-12 47 views
2

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

+0

你为什么要问它,你得到的是一些崩溃日志上市? – hol

回答

6

我遇到这也并认为这可以称为每当一个选择是在指定的延迟(低于2秒)后执行。

[foo performSelector:@selector(f1) withObject:nil afterDelay:2]; 

下面是主线程上的堆栈跟踪,其中应用程序在延迟20.060秒后死亡。尽管规定了2秒的延迟,但系统花费了更长的时间(超过10秒)来执行此选择器。这意味着,该系统使用一个NSTimer来处理与afterDelay参数performSelector电话。不幸的是,它似乎或许将通话置于主线程的事件队列,然后等待指定的延迟(或更多):

6基金会0x35bfaa6a __NSFireDelayedPerform

7的CoreFoundation 0x3add45dc CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 12

0
+0

感谢您的回复。实际上,对于相同的用户界面交互,我经历了一些场景,这个“NSFireDelayedPerform”有时会被调用,但不会用于其他场景。比如对于UITableView的滚动或选择,如果交互真的很疯狂,这个“NSFireDelayedPerform”可能会被触发。 – Pei