gpt4 book ai didi

ios updateDisplay 定时器

转载 作者:行者123 更新时间:2023-11-28 22:31:22 27 4
gpt4 key购买 nike

我有一个有点复杂的 iOS 用户界面,我需要每秒重新加载 UICollectionView 的特定单元格以显示时间(有点像复杂的秒表),我还需要每秒做一些其他事情在这次通话中。

问题的第 1 部分


我的问题是解决这种类型问题的最佳做法是什么?

选项 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com