天天看點

iOS中的延遲執行和定時器

延遲執行

方式一
[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");
}