美文网首页
GCD 定时器 iOS

GCD 定时器 iOS

作者: coder1003 | 来源:发表于2018-07-07 17:23 被阅读0次
#import <Foundation/Foundation.h>

typedef void(^TimerBlock)(void);

@interface SFTimer :NSObject

+ (instancetype)sharedInstance;

/**

 CGD定时器 回调方法在 主线程 中执行



 @param interval 定时间隔

 @param timerBlcok 回调

 */

- (void)startGCDTimerOnMainQueueWithInterval:(int)interval Blcok:(TimerBlock)timerBlcok;

/**

 CGD定时器 回调方法在 子线程 中执行



 @param interval 定时间隔

 @param timerBlcol 回调

 */

- (void)startGCDTimerOnGlobalQueueWithInterval:(int)interval Blcok:(TimerBlock)timerBlcol;

/** 停止定时器 */

- (void)stopGCDTimer;

@end













#import "SFTimer.h"

dispatch_source_t timer;

@implementation SFTimer

+ (instancetype)sharedInstance

{
    static dispatch_once_t __once_t;
    
    static id __singleon__;
    
    dispatch_once(&__once_t, ^{
        
        __singleon__ = [[self alloc] init];
    });
    return __singleon__;
    
}

- (void)startGCDTimerOnGlobalQueueWithInterval:(int)interval Blcok:(TimerBlock)timerBlcok {
    
    
    
    if(!interval) {
        
        interval =1;
        
    }
    
    
    
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    
    dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval * NSEC_PER_SEC, 0);
    
    
    
    dispatch_source_set_event_handler(timer, ^{
        
        if(timerBlcok) {
            
            timerBlcok();
            
        }
        
    });
    
    
    
    // 开启定时器
    
    dispatch_resume(timer);
    
}

- (void)startGCDTimerOnMainQueueWithInterval:(int)interval Blcok:(TimerBlock)timerBlcok {
    
    
    
    if(!interval) {
        
        interval =1;
        
    }
    
    
    
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    
    dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval * NSEC_PER_SEC, 0);
    
    
    
    dispatch_source_set_event_handler(timer, ^{
        
        dispatch_async(dispatch_get_main_queue(), ^{
            
            if(timerBlcok) {
                
                timerBlcok();
                
            }
            
        });
        
    });
    
    
    
    // 开启定时器
    
    dispatch_resume(timer);
    
}

- (void)stopGCDTimer {
    
    if(timer){
        
        dispatch_source_cancel(timer);
        
    }
    
}

- (void)dealloc

{
    
    [self stopGCDTimer];
    
}

@end

@end

相关文章

  • GCD定时器使用

    iOS中的常用定时器分为这几类: NSTimer CADisplayLink GCD定时器 选择GCD定时器原因:...

  • 定时器的使用介绍

    iOS中的定时器大致分为这几类: NSTimer CADisplayLink GCD定时器 (一)NSTimer ...

  • iOS常用定时器误差分析

    iOS中常NSTimer、CADisplayLink、GCD定时器,其中NSTimer、CADisplayLink...

  • iOS 定时器

    iOS常用定时器有3种 NSTimer GCD定时器 dispatch_source_t CADisplayLin...

  • iOS:NSTimer的几种创建方式

    在iOS开发中,经常会用到定时器,iOS中常用的定时器有三种:NSTimer,GCD,CADisplayLink。...

  • iOS知识点之定时器

    iOS中常用的定时器有三种,分别是NSTimer,CADisplayLink和GCD。 NSTimer GCD定时...

  • iOS Timer

    iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。...

  • iOS三大定时器

    iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。...

  • iOS NSTimer 和 GCD 定时器及封装

    iOS NSTimer 和 GCD 定时器及封装 iOS NSTimer 不准时 NSTimer 内部是有 run...

  • GCD进入后台继续运行

    iOS GCD创建标准定时器,进入后台后任可继续定时

网友评论

      本文标题:GCD 定时器 iOS

      本文链接:https://www.haomeiwen.com/subject/vnlguftx.html