从另一个视图控制器访问后使 NSTimer 对象无效

invalidate a NSTimer object after visiting from another view controller

情况

我有两个视图控制器 VC1VC2。 在 VC1 中,我需要以 x 秒 的间隔连续调用一个选择器 t 秒(其中 x < t).

我正在使用 NSTimer 对象来管理它。如果我在 VC1 中,那么 NSTimer 对象工作正常。它在 x second 之后调用它自己。这是我的代码

timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(methodName) userInfo:nil repeats:YES];

我也可以通过 [timer invalidate];

停止

问题:

现在我要去 VC2 然后再回到 VC1.

如何在VC1中停止timer

谢谢。

您可以停止正在使用的定时器

- (void)viewDidDisappear:(BOOL)animated {
     [timer invalidate]
 }

您可以使用委托来实现它。

您只需要在 VC2 中创建一个委托,然后在 VC1 中实现,在委托方法中(在 VC1 中)您只需使 NSTimer.

无效

你可以通过实现 forword 声明来做到这一点

@class VC1VC2 并在 VC1

中创建一个 BOOL 属性

现在当您从 VC2

推送 VC1 时设置 VC1.property = true

现在在 viewWillAppear 方法中检查 VC1

中的这个布尔值 属性

如果此 属性 比 invalidate timer 为真,并且还将 nil 设置为您的 timer 对象。

希望这对您有所帮助。

在VC1.h

@property bool timer validate;

在VC1.m调用VC2时输入这段代码

_timervalidate=true;

在使用 viewWillAppear 方法停止计时器后

-(void)viewWillAppear:(BOOL)animated
{
    if(_timervalidate==true)
    {
        [timer invalidate];
    }
}