NSTimer Troubles - PullRequest
       14

NSTimer Troubles

1 голос
/ 09 октября 2009

Я пытаюсь запустить приведенный ниже код, но он продолжает блокировать мой симулятор после того, как «Tick» записывается на консоль. Он никогда не выводит «Tock», поэтому я предполагаю, что это связано со строкой «NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow];» IBactions активируются с помощью кнопок. timer и startTime определены в .h как NSTimer и NSDate соответственно.

Может кто-нибудь сказать мне, что я делаю не так?

код:

- (IBAction)startStopwatch:(id)sender
{
    startTime = [NSDate date];
    NSLog(@"%@", startTime);
    timer = [NSTimer scheduledTimerWithTimeInterval:1 //0.02
                                             target:self
                                           selector:@selector(tick:)
                                           userInfo:nil
                                            repeats:YES];
}

- (IBAction)stopStopwatch:(id)sender
{
    [timer invalidate];
    timer = nil;
}

- (void)tick:(NSTimer *)theTimer
{
    NSLog(@"Tick!");
    NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow];
    NSLog(@"Tock!");
    NSLog(@"Delta: %d", elapsedTime);
}

У меня есть следующее в .h:

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {

    NSTimer *timer;
    NSDate *startTime;
}


- (IBAction)startStopwatch:(id)sender;
- (IBAction)stopStopwatch:(id)sender;
- (void)tick:(NSTimer *)theTimer;

@property(nonatomic, retain) NSTimer *timer;
@property(nonatomic, retain) NSDate *startTime;

@end

Ответы [ 2 ]

4 голосов
/ 09 октября 2009

Где у вас есть:

startTime = [NSDate date];

Вам нужно:

startTime = [[NSDate date] retain];

Все, что создано без alloc, new, init, будет автоматически освобождено (эмпирическое правило). Итак, что происходит, вы создаете NSDate, назначаете его startTime, он автоматически освобождается (уничтожается), затем вы пытаетесь вызвать timeIntervalSinceNow для полностью освобожденного объекта, поэтому он взрывается.

Добавление сохранения увеличило количество сохранений, поэтому оно все еще остается после автоматического освобождения. Не забудьте вручную отпустить его, когда закончите!

3 голосов
/ 09 октября 2009

Чтобы воспользоваться @property, вам нужно сделать: self.startTime = [NSDate date]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...