每当我完成我的 NSTimer 时,我想使其无效并创建一个新间隔,但它会保留旧间隔和新间隔。单击 offButton 后,我想使 NSTimes 无效。计时器停止打印“Working”,但是当我以不同的间隔调用我的方法时,它会为两个间隔打印“Working”。
我的代码是这样的:
-(void) fireTimer{
NSString *textValue = [sliderLabel text];
float value = [textValue floatValue];
[NSTimer scheduledTimerWithTimeInterval:value target:self selectorselector(vibrate userInfo:nil repeats:YES];
}
- (void) vibrateNSTimer*)timer {
if(_offButton.selected){
[timer invalidate];
timer=nil;
}
NSLog(@"Working");
}
直接从 UITextField
获取值并没有遵循 MVC 设计模式。这些值应该存储在模型对象中,并使用 MVC 模式将任何新值从文本字段中获取到模型中。您当前的实现非常微妙,将在微风中打破。它还要求这段代码能够访问 UI 元素,这是非常不灵活的;最好让它只访问模型对象。
将 NSTimer *
存储为实例变量,并注意如果您使用 ARC,则 NSTimer
保留目标 (!!) 所以让这个实例变量 __weak
打破保留循环。
如果你想让你的计时器重复,那么根本不需要重置它;仅当用户更改时间时才需要这样做(参见第 1 点!)。
将 if (button_selected) do_vibrate;
代码移到 timer failed 方法中。
关于ios - 无效和创建 NSTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15041424/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |