管理作为变量传递的计时器

Managing Timers Passed as Variables

我正在尝试执行我认为很简单的任务。我有一些需要启动和停止的重复计时器。

我创建了启动和停止计时器的方法,并尝试将计时器作为参数传递给这些方法。

问题是计时器似乎永远不会停止。任何想法为什么这可能无法正常工作?谢谢!

文件顶部:

#import "ViewController.h"

NSTimer *launchTimer;
NSTimer *transactionTimer;  

启动方式:

-(void) startingMethod {

    NSString *urlString = @"http://google.com";

    [[AsynchRequestService sharedInstance] 
    performAsynchronousURLRequest:urlString completion:^(BOOL success, 
    NSString *responseBody, NSString *responseStatus) {

        if (success) {       
            [self stopResponseTimer:launchTimer];
        }

        else {
            [self startResponseTimer:launchTimer 
            method:@selector(startingMethod) 
            interval:10];
        }
    }];
}

定时器启动方法:

-(void)startResponseTimer:(NSTimer *) timer method:(SEL) method 
interval:(int) interval {

[timer invalidate];
timer = nil;
timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self 
selector:method userInfo:nil repeats:YES];
}

停止定时器的方法:

-(void)stopResponseTimer:(NSTimer *) timer {

NSLog(@"STOP TIMER");

[timer invalidate];
timer = nil;
}

使startResponseTimer和`stopResponseTimer'取指针指向对象指针。

-(void)startResponseTimer:(NSTimer **) timer method:(SEL) method 
interval:(int) interval {

[*timer invalidate];
*timer = nil;
*timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self 
selector:method userInfo:nil repeats:YES];
}

-(void)stopResponseTimer:(NSTimer **) timer {

NSLog(@"STOP TIMER");

[*timer invalidate];
*timer = nil;
}

然后像

一样调用它
[self startResponseTimer:&launchTimer];
[self stopResponseTimer:&launchTimer];

这应该确保您保留正确的 NSTimer 对象。 NOTE:It is always a good idea to check a pointer to a pointer to an object for NULL in a public method