NSTimer触发但不增加(仅写入控制台)

我的NSTimer(startTimer)工作正常。 它运行所选的方法(runTimer),但无论我在(runTimer)中放置什么代码,它都不会增加。 例如,如果我运行下面的代码,它打印出5次但不增加x。 任何想法 - 谢谢

- (void)startTimer {
    self.timer  = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self     selector:@selector(runTimer:) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:5]];
    }
- (void)runTimer:(NSTimer *)aTimer {
    int x;
    x++;
    NSLog(@"int x = %i",x);
}
采纳答案:

在smparkes建议的Objective-C方法中要小心静态变量。 它们在该类的所有实例之间共享,因此如果您拥有此代码来自的任何对象的多个实例,则他的答案将不会按您期望的方式执行。 使用实例变量会更好,因为每个实例都有自己的变量,而不会影响其他实例:

在你的.h:

@interface MyClass : NSObject
{
    int x;
}

然后在你的-runTimer:方法中:

- (void)runTimer:(NSTimer *)aTimer {
    NSLog(@"int x = %i", x++);
}

如果你保证只有这个类的一个实例(例如它是一个单例),- -runTimer:方法中的静态变量将起作用,但我建议使用实例变量或@property,因为它更好编程实践。

author: andrew-madsen

参考更多解答: NSTimer fires but not incrementing (writing to console only) ,转载请保留出处NSTimer触发但不增加(仅写入控制台)及作者信息

Statement: We respect knowledge and authors. Since the content comes from the Internet and is intended for scientific research, any reprinters should retain the author's signature and origin. If you are the author of the content and feel in dispute, please contact email: 1076545519@qq.com. We will find out the situation and deal with it in time. We sincerely thank the author for his hard work.


更多:objective-c