NSTimer分配为属性

时间:2010-07-12 03:50:08

标签: iphone nstimer

如果我想创建一个包含三个实例变量和方法的简单类,比如

    NSInteger seconds;
    NSInteger minutes;
    NSTimer *timer;


- (void)setMinutes:(NSInteger)m;
- (void)setSeconds:(NSInteger)s;
- (NSInteger)minutes;
- (NSInteger)seconds;

我想要的是初始化一个NSTimer对象并让它与这些分钟/秒进行倒计时。但是我不知道如何初始化定时器,并在需要时释放它(如果我有多个定时器的话)。我知道如何使用该方法:

[NSTimer scheduledTimerWithTimeInterval:1.0
                                target:self 
                               selector:@selector(doTimer:)
                               userInfo:nil
                                repeats:YES];

我没有看到NSTimer需要“alloc”的示例,或者是否需要发布它。

1 个答案:

答案 0 :(得分:2)

scheduledTimerWithTimeInterval返回NSTimer的实例。只需使用属性并覆盖setter即可使计时器无效

    NSTimer *timer;

@property (nonatomic, retain) NSTimer *timer;
- (void)setTimer:(NSTimer *)t;



- (void)setTimer:(NSTimer *)t {
    if (timer) {
        [timer invalidate];
        [timer release];
        timer = nil;
    }

    timer = [t retain];
}

她使用self.timer指向计时器,当你设置self.timer = newTimer时,它会保留新的计时器并使旧计时器失效并释放。

需要注意的重要一点是,你的setter希望输入计时器是一个自动释放的副本。如果您打算使用已经使用的NSTimer scheduledTimerWithTimeInterval方法,那就没关系。