管理定时器作为变量传递

时间:2015-05-31 20:02:50

标签: ios objective-c nstimer

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

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

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

文件顶部:

#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;
}

1 个答案:

答案 0 :(得分:1)

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

-(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