【问题标题】:(iphone) start timer from background thread?(iphone) 从后台线程启动计时器?
【发布时间】:2011-03-30 09:31:00
【问题描述】:

我用[NSTimer scheduledTimerWithTimerInterval:target:selector:...] 从后台线程创建了一个计时器
似乎从后台线程创建的计时器没有调用作为参数给出的选择器。

我需要什么特别的东西才能从后台线程运行计时器吗?
谢谢

  • 编辑

这是顺序

performSelectorInBackground: pushViewController

来自 viewController 的初始化序列,

I alloc a timer with the above method.  

并且计时器选择器不会被调用。

【问题讨论】:

  • 请提供代码示例,我们不是通灵者!
  • 谢谢。但请提供实际代码,而不是“转述”。强烈推荐阅读:msmvps.com/blogs/jon_skeet/archive/2010/08/29/… 引用:'不要给我“类似于”真实代码但显然不是真实代码的代码'

标签: iphone multithreading nstimer


【解决方案1】:

您应该只从主线程对 UI 做一些事情——比如推送视图控制器和更改 UI 项。如您所见,如果您不这样做,事情就会破裂。

请参阅标题为“可可框架线程安全吗?”的 Cocoa 基础指南部分:它说“所有 UIKit 对象都应仅在主线程上使用。”

原答案

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

【讨论】:

  • @occulus 感谢您的回复,是的,我附加了“:”,并设置了一个 bp 以查看它是否被调用。
  • 一旦我将 performselectorinbackground: pushViewController 部分更改为普通 [navController pushViewController..] ,计时器工作正常
  • 我的猜测是执行“pushViewController”的线程在视图加载时已经消失了......并且计时器已附加到现在已消失的线程。(如果有将计时器附加到的概念一个线程)
  • [navController pushViewController] 没有用计时器做任何事情,你是什么意思?
  • @occulus 被推送的 viewController 创建了一个计时器。 (见我的编辑)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 2011-10-26
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多