Ответ 1
Класс NSTimer
немного неудобен для использования; вместо того, чтобы отделять создание/разрушение от начала/остановки, все это свернулось вместе. Другими словами, таймер запускается сразу после его создания и останавливается, как только он уничтожается.
Поэтому вам необходимо использовать существование объекта NSTimer
в качестве флага, чтобы указать, работает ли он; что-то вроде этого:
// Private Methods
@interface MyClass ()
{
NSTimer *_timer;
}
- (void)_timerFired:(NSTimer *)timer;
@end
@implementation MyClass
- (IBAction)startTimer:(id)sender {
if (!_timer) {
_timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(_timerFired:)
userInfo:nil
repeats:YES];
}
}
- (IBAction)stopTimer:(id)sender {
if ([_timer isValid]) {
[_timer invalidate];
}
_timer = nil;
}
- (void)_timerFired:(NSTimer *)timer {
NSLog(@"ping");
}