保证任务在主线程中执行(NSObject+GCD.h)

来源:互联网 发布:火狐兼容的js报表打印 编辑:程序博客网 时间:2024/05/16 15:26


.h


@interface NSObject (GCD)-(void) asyncTask:(dispatch_block_t)block;//-(void) syncTask:(dispatch_block_t)block;-(void) syncTaskOnMain:(dispatch_block_t)block;-(void) asyncTask:(dispatch_block_t)block after:(NSTimeInterval)delay;//-(void) syncTask:(dispatch_block_t)block after:(NSTimeInterval)delay;-(void) syncTaskOnMain:(dispatch_block_t)block after:(NSTimeInterval)delay;-(void) asyncTask:(dispatch_block_t)block returnOnMain:(dispatch_block_t)block2;@endvoid safe_dispatch_main_sync(dispatch_block_t block);void safe_dispatch_main_async(dispatch_block_t block);




.m

@implementation NSObject (GCD)-(void)asyncTask:(dispatch_block_t)block {    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block);}//-(void)syncTask:(dispatch_block_t)block {//    dispatch_async(dispatch_get_current_queue(), block);//}-(void)syncTaskOnMain:(dispatch_block_t)block {    dispatch_async(dispatch_get_main_queue(), block);}-(void) asyncTask:(dispatch_block_t)block after:(NSTimeInterval)delay {    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC),                   dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block);}//-(void) syncTask:(dispatch_block_t)block after:(NSTimeInterval)delay {//    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC),//                   dispatch_get_current_queue(), block);//}-(void) syncTaskOnMain:(dispatch_block_t)block after:(NSTimeInterval)delay {    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC),                   dispatch_get_main_queue(), block);}-(void)asyncTask:(dispatch_block_t)block returnOnMain:(dispatch_block_t)block2 {    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        block();        dispatch_async(dispatch_get_main_queue(), block2);    });    }@endvoid safe_dispatch_main_sync(dispatch_block_t block) {    if ([NSThread isMainThread]) {        block();    } else {        dispatch_sync(dispatch_get_main_queue(), block);    }}void safe_dispatch_main_async(dispatch_block_t block) {    if ([NSThread isMainThread]) {        block();    } else {        dispatch_async(dispatch_get_main_queue(), block);    }}


0 0
原创粉丝点击