2009-12-10 46 views

回答

4

我不是100%确定的,但我相信当控制权返回到运行循环并且应用程序可以接受用户输入(通常在applicationDidFinishLaunching方法的末尾)时,计时器会停止。

但是,如果您在applicationDidFinishLaunching中加载视图,并且loadView或viewDidLoad需要很长时间,那么您的应用程序可能会被操作系统关闭。或者,您可以使用延迟为0的-performSelector:withObject:afterDelay:调用该方法,并且该方法将在运行循环中排队并尽快运行。

如果在将控制权移交给用户之前必须进行大量处理,则应该考虑在后台线程上执行该负载。

编辑:这是relevant Technical Q&A

+0

使用performSelector:withObject:afterDelay,你说我应该是安全的,无论因为运行循环已经在进行?但是如果我的方法在主线程上花费了很多时间 - 即使我正在使用performSelector,操作系统仍然会杀死它?我相信这个单独的线程可能是最好的选择。 – 4thSpace 2009-12-10 07:16:36

+0

不,使用performSelector:withObject:afterDelay:将首先运行循环,然后执行选择器。一旦你在applicationDidFinishLaunching之后点击运行循环,关闭计时器就会被终止 – 2009-12-10 15:03:43

1

一般来说,任何耗时的东西都不应该在主线程中完成。你正在applicationDidFinishingLaunching应尽快返回。既可以防止你的应用被SpringBoard杀死,也可以作为用户的不错体验。请使用p erformSelector:withObject:afterDelay:或使用NSOperations将内容移出主线程。