gpt4 book ai didi

objective-c - 最佳实践 : How to update a repeating NSTimer interval after each call to the selector method

转载 作者:行者123 更新时间:2023-12-03 17:05:50 25 4
gpt4 key购买 nike

我有一个需要重复执行的 NSTimer 对象。它调用的代码最终会在 4 种不同的状态之间切换我的应用程序中的设置。每次状态发生变化时,我都希望计时器上的间隔发生变化。此循环应在应用程序的整个生命周期中持续进行。

据我所知,您无法更新 NSTimer 上的 interval 属性。我相信这意味着每次我在计时器代码中切换状态时都需要添加代码来创建新的 NSTimer 对象。以下是我的想法:

//Consider that in my containing class, there is an NSTimer property, named myTimer.

//My selector method, used by myTimer
-(void) updateState:(NSTimer *) timer
{
switch (AppState)
{
case state_1:
//Update current state to state_2
[self setMyTimer:[NSTimer scheduledTimerWithTimeInterval:30.0
target:self
selector:@selector(updateState:)
userInfo:nil repeats:NO];
break;
case state_2:
//Update current state to state_3
[self setMyTimer:[NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(updateState:)
userInfo:nil repeats:NO];
break;
case state_3:
//Update current state to state_4
[self setMyTimer:[NSTimer scheduledTimerWithTimeInterval:30.0
target:self
selector:@selector(updateState:)
userInfo:nil repeats:NO];
break;
case state_4:
//Update current state back to state_1
[self setMyTimer:[NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(updateState:)
userInfo:nil repeats:NO];
break;
}
}

这是最佳解决方案还是创建所有这些计时器会在我的应用程序连续执行时造成任何形式的问题?

此外,我在我的项目中启用了 ARC。在这种情况下,我还需要销毁之前的 NSTimer 对象吗?

最佳答案

can the creation of all these timers cause any form trouble for my application as it continuously executes?

只要您正确管理内存就不会。使用综合 setter 将为您解决这个问题。

In this case, will I still need to destroy the previous NSTimer objects?

没有明确指出。当非重复计时器触发时,它会使自身失效,并且运行循环会发送release(因为它已保留它)。如果您对其有声明,则还需要释放它,您可以使用 setter 来释放它。

由于这些计时器都不重复,您可以删除 ivar 并使用 performSelector:withObject:afterDelay:

- (void)updateState {

NSTimeInterval delay = 30;
switch(AppState)
{
case 1: { break; }
case 2: { delay = 5.0;
break; }
case 3: { break; }
case 4: { delay = 5.0;
break; }
}

[self performSelector:@selector(updateState)
withObject:nil
afterDelay:delay];

}

(顺便说一句,我假设您的真实代码中有 break。如果没有,您绝对应该这样做。)

关于objective-c - 最佳实践 : How to update a repeating NSTimer interval after each call to the selector method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8930339/

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