延迟执行
方式一
[self performSelector:@selector(endAd) withObject:nil afterDelay:3];
//3秒后 执行下面这个方法
- (void)endAd {
NSLog(@"延迟执行");
}
//取消延迟执行
//取消定时器
- (void)cancelEndAd {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(endAd) object:nil];
}
//可用于 APP启动的开机广告页
方式二 GCD
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//3秒后 执行block内的代码
});
定时器 NSTimer
- (void)awakeFromNib{
[super awakeFromNib];
NSTimer *timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(handleAction) userInfo:nil repeats:YES];
上面的这个方式创建 定时器 要手动添加到主运行循环中
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
}
- (void)handleAction {
NSLog(@"-------1");
}
//停止定时器
- (void)stopTimer
{
[self.timer invalidate];
self.timer = nil;
}
- (void)awakeFromNib{
[super awakeFromNib];
//这种方法创建 定时器 不需要主动添加到循环中
[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(handleAction) userInfo:nil repeats:YES];
}
- (void)handleAction {
NSLog(@"-------1");
}
- (void)stopTimer
{
[self.timer invalidate];
self.timer = nil;
}
CADisplayLink 定时器
- 创建
CADisplayLink
成功后必须要把他添加到 主运行循环中
- (void)awakeFromNib{
[super awakeFromNib];
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleAction)];
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}
- (void)handleAction {
NSLog(@"-------1");
}