- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个有点复杂的 iOS 用户界面,我需要每秒重新加载 UICollectionView 的特定单元格以显示时间(有点像复杂的秒表),我还需要每秒做一些其他事情在这次通话中。
我的问题是解决这种类型问题的最佳做法是什么?
选项 1(使用递归调用)
- (void)viewDidLoad
{
[self runUpdateDisplayLoop];
}
- (void)runUpdateDisplayLoop
{
//do stuff (reload cell, etc)
//Recurissively Call Every Second
dispatch_async(dispatch_get_main_queue(), ^{
[self performSelector:@selector(runUpdateDisplayLoop) withObject:nil afterDelay:1.0];
});
}
选项 2(使用 NSTimer)
- (void)viewDidLoad
{
NSTimer *updateDisplayTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(runUpdateDisplayLoop:)
userInfo:nil
repeats:YES];
}
- (void)updateDisplayLoop:(NSTimer *) theTimer
{
//do stuff (reload cell, etc)
}
问题的第 2 部分
无论哪种情况,启动和终止这些循环的最佳位置是什么?
如果我将它们放在 ViewDidLoad 中,即使我已经离开相关 View ,它们也会继续被调用,我宁愿只在需要时运行循环。另一方面,每次显示 View 时都必须运行循环(即使 View 已以各种方式关闭 - 应用程序关闭和重新打开、电话调用中断等)。关于应用生命周期,我的目标是 iOS 5 和 iOS 6。
我猜有一个涉及“viewWillAppear”和“viewWillDisappear”的解决方案,但我对陷入其中一个或另一个未被调用的情况持怀疑态度。我也不想通过做出任何错误假设来产生多个循环。
最佳答案
对于第 1 部分
我建议使用计时器。主要原因是您可以通过使计时器无效来停止该过程。使用 performSelector 你可以实现类似的东西,但我不会走那条路。对每个人来说。
对于第 2 部分
您确实想使用 viewWillAppear
(或 viewDidAppear
)和 viewDidDisappear
(或 viewWillDisappear
)。在出现时设置计时器并在消失时将其拆除。
查看 RespondingtoDisplay-Notifications
希望这能阐明事情并解决您的“但我对进入其中一个或另一个未被调用的情况持怀疑态度。”关注
关于ios updateDisplay 定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370819/
我有一个有点复杂的 iOS 用户界面,我需要每秒重新加载 UICollectionView 的特定单元格以显示时间(有点像复杂的秒表),我还需要每秒做一些其他事情在这次通话中。 问题的第 1 部分 我
我是一名优秀的程序员,十分优秀!