1。NSTimer:在将来的某一时刻开始一次性执行或是周期性执行指定的方法
方法:+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector
userInfo:(id)userInfo repeats:(BOOL)repeats
e.g.@property (nonatomic, strong) NSTimer *paintingTimer;
- (void) paint:(NSTimer *)paramTimer{
/* Do something here */
NSLog(@"Painting");
}
- (void) startPainting{
self.paintingTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(paint:)
userInfo:nil
repeats:YES];
//若repeats是NO,必须加入循环,才能启动一次,否则无效。(若是YES,则在NSTimer生成时,会自动加入默认的循环)
[[NSRunLoop currentRunLoop] addTimer:self.paintingTimer
forMode:NSDefaultRunLoopMode];
}
- (void) stopPainting{
if (self.paintingTimer != nil){
[self.paintingTimer invalidate];
}
}
方法:+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds invocation:(NSInvocation *)invocation repeats:(BOOL)repeats
e.g.- (void) startPainting{
SEL selectorToCall = @selector(paint:);
NSMethodSignature *methodSignature = [[self class] instanceMethodSignatureForSelector:selectorToCall];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
[invocation setTarget:self];
[invocation setSelector:selectorToCall];
/* Start a scheduled timer now */
self.paintingTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
invocation:invocation
repeats:YES];
//若repeats是NO,必须加入循环,才能启动一次,否则无效。(若是YES,则在NSTimer生成时,会自动加入默认的循环)
[[NSRunLoop currentRunLoop] addTimer:self.paintingTimer
forMode:NSDefaultRunLoopMode];
}