ios GCD的运用

来源:互联网 发布:java应用商店 编辑:程序博客网 时间:2024/04/25 15:10

GCD实现倒计时

__blockint timeout=59;//倒计时时间    dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);    dispatch_source_t _timer =dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0,queue);    dispatch_source_set_timer(_timer,dispatch_walltime(NULL,0),1.0*NSEC_PER_SEC,0);//每秒执行    dispatch_source_set_event_handler(_timer, ^{        if(timeout<=0){//倒计时结束,关闭            dispatch_source_cancel(_timer);            dispatch_async(dispatch_get_main_queue(), ^{                //设置界面显示 根据自己需求设置            });        }else{            int seconds = timeout %60;            NSString *strTime = [NSStringstringWithFormat:@"%.2d", seconds];            dispatch_async(dispatch_get_main_queue(), ^{                //设置界面显示 根据自己需求设置            });            timeout--;        }    });    dispatch_resume(_timer);


GCD实现单例

// 提供单例接口 + (instancetype) sharedInstantObj;

#pragma mark - 重写allocWithZone, alloc方法最终会调用allocWithZone+ (instancetype)allocWithZone:(struct_NSZone *)zone{    staticinstantObj* obj;    staticdispatch_once_t onceToken;    //dispatch_once可以保证block中的代码永远只被执行一次    dispatch_once(&onceToken, ^{        obj = [super allocWithZone:zone];    });    return obj;}+ (instancetype)sharedInstantObj{    return [[self alloc] init];}


GCD实现开启并发线程

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0), ^{//设置界面显示 根据自己需求设置    });

GCD获得主线程
dispatch_async(dispatch_get_main_queue(), ^{//设置界面显示 根据自己需求设置});


GCD队列暂停执行处理
// 挂起队列dispatch_suspend(queue);// 恢复队列执行dispatch_resume(queue);







0 0
原创粉丝点击