【问题标题】:iOS: multiple NSTimer instances using the same view - do I need to use multithreading?iOS:使用同一个视图的多个 NSTimer 实例 - 我需要使用多线程吗?
【发布时间】:2012-03-21 15:29:45
【问题描述】:

我正在开发一个多视图应用程序。其中一个视图是表格视图。每个单元格都有一个秒表。我打算将 NSTimer 用于秒表。即使用户切换视图然后稍后返回,我是否需要实现多线程以使计时器正常工作? 我做了我的研究,但大多数教程都在一个视图中涵盖了一个 NSTimer。我想确保用户可以在计时器运行时做其他事情,比如使用界面、导航等。在另一篇帖子Placing an NSTimer in a separate thread 有人说你需要一个不同的计时器运行循环。在我的情况下,每个计时器都需要一个运行循环吗?可取吗?任何性能缺陷?

非常感谢!

【问题讨论】:

  • 你会同时运行多个秒表吗?
  • NSTimers 不会影响主线程 (UI)。因此,您可以使用任意数量的 NSTimer。
  • @KyleRosenbluth 是的,我将同时运行多个秒表。他们每个人都会跟踪不同的活动。
  • 尝试将它们添加到这些运行循环中: NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; [runLoop addTimer:timer forMode:NSRunLoopCommonModes]; [runLoop addTimer:timer forMode:UITrackingRunLoopMode];
  • 感谢@KyleRosenbluth,但我采用了 Dancreek 发布的方法。 1 个计时器,用于更新所有秒表。用作魅力

标签: iphone xcode multithreading nstimer nsrunloop


【解决方案1】:

一个运行循环应该没问题。您的界面仍将是响应式的。

请记住,计时器永远无法保证准确无误。它们受到同一循环中有多少其他东西的影响。可以使用计时器来更新显示,但不能实际测量时间。启动秒表时设置 NSDate,然后在每次显示计时器更新显示时将当前日期与该开始日期进行比较。

既然您应该只使用 NSTimer 来更新显示,您是否可以只使用一个通用的显示更新计时器来更新所有正在运行的秒表,而不是为每个秒表设置一个?

【讨论】:

  • 感谢您的回答@Dancreek!我将在今晚和接下来的几天内努力实施这一点。我会及时向大家发布。我喜欢 1 个计时器更新所有秒表的想法。每次计时器触发时,我都可以遍历所有秒表,如果它们的状态 == 正在运行,我可以更新它们的显示。这实际上是一个很棒的建议。但是我对准确性感到困惑。你说不要用它来跟踪时间。但秒表正是这样做的。当计时器触发时,我应该将秒表增加 1 秒。我该怎么办?谢谢
  • 我刚刚明白你所说的 NSDate 是什么意思,这正是我已经在我的应用程序中实现的。我为每个秒表都有一个发生对象,它有一个 START_TIME 作为属性。使用当前时间和 START_TIME 我可以轻松计算 TIMEINTERVAL !谢谢!!
  • 工作就像一个魅力丹克里克。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 2013-06-08
相关资源
最近更新 更多