В моем MotorViewController
есть 5 кнопок, которые действуют как выключатели для 5 двигателей. Нажмите кнопку A, двигатель A будет работать бесконечно, пока вы не нажмете кнопку еще раз, чтобы остановить его.
Я только что добавил 6-ю кнопку, которая сообщает двигателю А работать в течение 2 минут. Я добавил код NSTimer
в мой ViewController
, и все работает отлично. Через 2 минуты я вызываю мой метод runPump
, и двигатель автоматически отключается.
Я довольно сильно оптимизировал свой MotorViewController
, и это будет первая оптимизация для NSTimer
.
Вот код:
#import "MotorViewController.h"
@interface MotorViewController()
@property (nonatomic, strong) NSTimer *counterTimer;
@end
@implementation MotorViewController
{
int _count;
}
- (void)viewDidLoad
{
_count = 0;
}
// called from the 6th button action method (code is implied)
- (void)setupTimerForCalib
{
self.counterTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(timerCount)
userInfo:nil
repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.counterTimer forMode:NSRunLoopCommonModes];
NSLog(@"timer started");
}
- (void)timerCount {
_count++;
NSLog(@"count: %d", _count);
if (_count == 120) {
_count = 0;
[self.counterTimer invalidate];
NSLog(@"timer ended");
// timer has ended, shut pump A (SALINE) off
[self setPumpInfo:SALINE select:0];
[self runPump];
}
}
У меня есть другой контроллер представления, который я хотел бы использовать эти методы, поэтому лучшая причина еще не просто хранить их в MotorViewController
.
Должен ли я хранить эти NSTimer
методы в MotorViewController
или создать для них класс делегирования? Или (после небольшой суеты в Интернете) настроить NSNotification
, который через 2 минуты вызывает setPumpInfo:select:
и runPump
?
Какой бы ни был лучший вариант, не могли бы вы объяснить причину этого по сравнению с другим. Я пытаюсь узнать больше о шаблонах проектирования и знать, как использовать их в правильных сценариях. Спасибо!