2011-03-30 63 views
0

我从后台线程创建了一个带有[NSTimer scheduledTimerWithTimerInterval:target:selector:...]的计时器
看起来从后台线程创建的计时器不会调用作为参数给出的选择器。(iPhone)从后台线程启动计时器?

有什么特别的我需要从后台线程运行一个计时器?
谢谢

  • 编辑

这里的序列

performSelectorInBackground: pushViewController 

从的viewController的初始化序列,

I alloc a timer with the above method. 

和定时器选择器将不会被调用。

+0

代码示例请,我们不是通灵! – occulus 2011-03-30 09:35:47

+0

谢谢。但实际的代码请不要“转述”。强烈建议阅读此:https://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx Quote:'不要给我代码是“像”的东西真正的代码,但显然不是真正的代码' – occulus 2011-03-30 09:42:42

回答

1

您应该只对UI执行操作 - 比如推送视图控制器和更改UI项 - 从主线程中执行。正如你所看到的,如果你不这样做,事情就会破裂。

请参阅Cocoa基础知识指南中标题为“Cocoa框架线程安全吗?”的部分:它说:“所有的UIKit对象只能在主线程中使用。”

原来的答复

没有什么特别需要的。选择器将在您执行scheduleTimer调用的线程上被调用。

+0

@occulus谢谢你的回复,是的,我附加了“:”,我设置了一个bp来查看它是否被调用。 – eugene 2011-03-30 09:42:23

+0

一旦我改变了pe​​rformselectorinbackground:pushViewController部分为普通[navController pushViewController ..],定时器工作正常 – eugene 2011-03-30 09:43:32

+0

我的猜测是,执行“pushViewController”的线程消失了时间视图加载..和计时器被连接到现在-gone线程(如果有一个将定时器附加到线程的概念) – eugene 2011-03-30 09:45:09