Objective C:从另一个方法调用变量

时间:2011-01-15 20:06:25

标签: objective-c methods timer

我正试图在另一种方法中使用名为getTimer的方法访问NSTimer。

- (NSTimer *)getTimer{      
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector: @selector(produceBricks) userInfo:nil repeats:YES];
return timer;
[timer release];
}

我试图通过使用以下方法停止计时器(一种会暂停游戏的方法):

if ([getTimer.timer isValid]) {
    [getTimer.timer invalidate];
}

我假设这不是正确的语法,因为它告诉我getTimer未声明。我如何访问计时器以便我可以阻止它?

2 个答案:

答案 0 :(得分:4)

getTimer是一种方法,而不是对象,因此您无法向其发送消息或访问属性。相反,假设该方法与调用它的方法属于同一类,您可以这样称呼它:

NSTimer *timer = [self getTimer];
if ([timer isValid]) [timer invalidate];
//...

此外,您尝试在return语句之后在getTimer方法中释放计时器。这段代码永远不会被执行(方法已经结束) - 在这种情况下这很好,因为你不应该释放计时器,它已经自动释放了。我建议您阅读有关Objective-C内存管理和命名约定的内容。

答案 1 :(得分:1)

使计时器成为实例变量,而不是在getTimer内创建。然后它将在类中的任何地方访问,如下所示:

在MyClass.h中

NSTimer* timer;

我会实现一个startTimer和stopTimer方法。

- (void) startTimer {
    timer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector: @selector(produceBricks) userInfo:nil repeats:YES];
}


- (void) stopTimer {
    if([timer isValid]) {
        [timer invalidate];
    }
}