递增一次后NSTimer停止

mot*_*tox 1 object-state nstimer uilabel ios

我有一个NSTimer我想每秒更新一个标签.我的代码是:

- (IBAction)OnClickEmergencyButton:(id)sender
{
    emergencyAlertTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(emergencyTimer) userInfo:nil repeats:YES];
    [emergencyAlertTimer fire];
}

- (void)emergencyTimer
{
    int i = 0;
    _emergencyAlertTriggerTimerLabel.text = [NSString stringWithFormat:@"%d", ++i];
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,标签最初显示为"1"然后停止.

我希望标签每秒都能连续计数,比如"1","2","3"......

Mid*_* MP 5

您的计时器没有问题.问题在于内部的变量声明emergencyTimer,您将其声明为局部变量.因此,每次计时器触发时,变量将再次初始化为0.因此,将变量声明为static,以便它可以保留该值.

改变方法如:

-(void)emergencyTimer
{
    static int timeValue = 0;
    _emergencyAlertTriggerTimerLabel.text = [NSString stringWithFormat:@"%d",++timeValue];
}
Run Code Online (Sandbox Code Playgroud)

为什么静态变量和为什么不是实例变量?

我没有使用实例变量来保持变量"Scope"安全.如果我将它作为实例变量,它可以被同一个类的其他方法访问,如果不需要该功能,我认为使用静态变量会更好.