【问题标题】:Objective C: Call variable from another method目标 C:从另一个方法调用变量
【发布时间】:2011-01-15 20:06:25
【问题描述】:

我正在尝试在另一个方法中访问名为 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 未声明。我将如何访问计时器以便停止它?

【问题讨论】:

  • 不要调用方法getTimerget 在 Cocoa 中有一个非常明确的含义,这不是。

标签: objective-c methods timer


【解决方案1】:

getTimer 是一个方法,而不是一个对象,所以你不能向它发送消息或访问属性。相反,假设该方法与调用它的方法在同一个类中,您可以这样调用它:

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

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

【讨论】:

    【解决方案2】:

    使计时器成为实例变量,而不是在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];
        }
    }
    

    【讨论】:

    • 我试过了,但不太确定如何使用它。我将如何启动计时器。 [timer validate]; 会起作用吗?
    • 抱歉,我没有看到您正在返回计时器。我已经更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    相关资源
    最近更新 更多