开发者

NSTimer allocation as a property

开发者 https://www.devze.com 2023-01-07 09:50 出处:网络
If I wanted to create a simple class that has three instance variables and methods like NSInteger seconds;

If I wanted to create a simple class that has three instance variables and methods like

    NSInteger seconds;
    NSInteger minutes;
    NSTimer *timer;


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

What I want is to initialize a NSTimer object and have it countdown with those minutes/seconds. But I'm not sure how to initialize the timer, and release it if I need to (in the event I had multiple timers going). I know how to use the method:

[NSTimer scheduledTimerWithTimeInterval:1.0
                                target:self 
                               selecto开发者_开发问答r:@selector(doTimer:)
                               userInfo:nil
                                repeats:YES];

I don't see an example of NSTimer needing "alloc", or if it needs to be released as well.


scheduledTimerWithTimeInterval returns an instance of NSTimer. Just use properties and override the setter to invalidate the timer

    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];
}

Her you have a pointer to the timer using self.timer, and when you set self.timer = newTimer, it retains the new one and invalidates and releases the old one.

Important to note is that your setter expects the input timer to be an autoreleased copy. If you plan on using the NSTimer scheduledTimerWithTimeInterval method you are already using, this will be fine.

0

精彩评论

暂无评论...
验证码 换一张
取 消