2010-07-12 4 views
1

Si je voulais créer une classe simple qui a trois variables d'instance et des méthodes telles queallocation NSTimer comme propriété

NSInteger seconds; 
    NSInteger minutes; 
    NSTimer *timer; 


- (void)setMinutes:(NSInteger)m; 
- (void)setSeconds:(NSInteger)s; 
- (NSInteger)minutes; 
- (NSInteger)seconds; 

Ce que je veux est d'initialiser un objet NSTimer et faites-le compte à rebours avec les minutes/secondes. Mais je ne suis pas sûr de savoir comment initialiser la minuterie, et la relâcher si nécessaire (dans le cas où plusieurs minuteurs se déclenchent). Je sais comment utiliser la méthode:

[NSTimer scheduledTimerWithTimeInterval:1.0 
           target:self 
           selector:@selector(doTimer:) 
           userInfo:nil 
           repeats:YES]; 

Je ne vois pas un exemple de NSTimer besoin « alloc », ou si elle a besoin d'être libéré aussi bien.

Répondre

2

scheduledTimerWithTimeInterval renvoie une instance de NSTimer. Il suffit d'utiliser les propriétés et passer outre le dispositif de réglage pour invalider la minuterie

NSTimer *timer; 

@property (nonatomic, retain) NSTimer *timer; 
- (void)setTimer:(NSTimer *)t; 



- (void)setTimer:(NSTimer *)t { 
    if (timer) { 
     [timer invalidate]; 
     [timer release]; 
     timer = nil; 
    } 

    timer = [t retain]; 
} 

Son vous avez un pointeur sur la minuterie à l'aide self.timer et lorsque vous définissez self.timer = newTimer, il conserve la nouvelle et Invalide et libère l'ancien.

Il est important de noter que votre programmateur s'attend à ce que la minuterie d'entrée soit une copie auto-libérée. Si vous envisagez d'utiliser la méthode NSTimer scheduledTimerWithTimeInterval que vous utilisez déjà, ce sera parfait.