iphone - 如何让 NSTimer 保持活力?

标签 iphone objective-c ios xcode4 nstimer

我的应用程序中有 2 个 View Controller ,从第一个 View 导航到下一个 View 时,有一个名为 startTimer 的按钮,在单击 startTimer 时将计时器操作作为选择器方法,计时器以 HH:mm:ss 启动 格式,我没有使计时器无效,但是当我回到第一个 viewController 时,如果我再次回到第二个 viewController,如果我按下 startTimer 按钮,计时器再次从 0 开始,但我希望它被保留以前的值(value),我怎样才能做到这一点?我知道,因为我再次加载 viewController,nib 将被重新加载到内存中,但是我如何保留计时器标签和计时器值? 提前感谢任何帮助。谢谢。

最佳答案

您通过将数据放入 View Controller 破坏了 MVC(模型- View - Controller )。此外,您要求一种对时间没有可靠 promise 的机制 (NSTimer) 来为您跟踪时间。 NSTimer 不会在您请求的时间间隔内准确地 触发。它可以在该时间间隔后的任意点触发。 NSTimer 用作秒表几乎总是会浪费时间(有时会浪费很多时间,尤其是在周围有 ScrollView 的情况下)。(最后一点被夸大了。重复计时器正确安排自己,所以通常不会浪费时间。如果重复被完全跳过,你只会浪费时间,这可能发生在长滚动或其他可以使计时器保持一整秒的事情中。)

创建一个新的模型对象来保存秒表信息。我们称它为 Stopwatch。假设您需要它是可启动和可停止的,它需要一个 NSTimeInterval accumulatedTime 属性和一个 NSDate lastStarted 属性(您也可以将 lastStarted 设为 NSTimeInterval 如果你喜欢)。因此,要启动秒表,请将 lastStarted 设置为“now”。要停止秒表,请清除 lastStarted 并将当前累计时间移至 accumulatedTime。要找出当前时间,您可以将 accumulatedTime 添加到 now - lastStarted

好的,现在你有了它,你能用它做什么?您可以将它传递给您的 View Controller ,他们可以询问“当前秒表值是多少?”他们可以随心所欲地开始和停止它。

现在你的 View Controller 想要每秒更新它的显示,所以你有一个计时器可以做到这一点。每一秒它都会询问秒表“现在是什么时候”并显示出来。但它不会设置时间。它只是询问。

顺便说一句,您还可以在 Stopwatch 上使用 KVO,但这有点棘手,因为 Stopwatch 需要运行自己的计时器来发送更改通知。我通常觉得这比它的值(value)更麻烦。

关于iphone - 如何让 NSTimer 保持活力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9787860/

相关文章:

iphone - 在 Objective C 中查询数组(如 MySQL)

ios - cordova/ios/hybrid 应用程序 - UITableView 加载项目不正确且无序

iphone - iPhone游戏咖啡馆音效

ios - 实现 iRate 时出现问题

ios - 在类(class)开始时运行代码

iphone - iOS 中的应用程序 session ?

iphone - iphone 模拟器和设备之间的屏幕标签颜色不同?

iphone - UIWebView的setKeyboardAppearance

ios - 将真实图像坐标转换为宽高比?

javascript - 如何在没有 Xcode 的情况下手动安装 Phonegap 库?