美文网首页ios开发进阶程序员征服iOS
iOS dispatch_async到主线程封装C接口

iOS dispatch_async到主线程封装C接口

作者: 石虎132 | 来源:发表于2017-09-23 00:18 被阅读152次

    //联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄

    一、概念

    代码里面有时候会把将要执行的内容放到主线程里面执行,但如果已经是主线程里面的代码调用dispatch_async的时候偶尔会出现crash,所以就需要判断是否已经在主线程里面了。通常的做法类似于下面所代码:

    以下是C接口:

    voidWXPerformBlockSyncOnMainThread(void(^_Nonnullblock)())

    {

    if(!block)return;

    if([NSThread isMainThread]) {

    block();

    }else{

    dispatch_sync(dispatch_get_main_queue(), ^{

    block();

    });}}

    可以封装成宏

    #define dispatch_main_async_safe(block)\

    if ([NSThread isMainThread]) {\

    block();\

    } else {\

    dispatch_async(dispatch_get_main_queue(), block);\

    }

    缺点:

    这样就可以在代码里面调用dispatch_main_async_safe安全的分发任务到主线程里面运行但是这个的问题是,宏里面的block是无法打断点调试的,

    - (void)sendBatchCancelRequestWithOrderIds:(NSArray *)orderIds {

    NSMutableString *orderIdsStr = [[NSMutableString alloc] initWithCapacity:orderIds.count];

    for(NSString *stringinorderIds) {

    [orderIdsStr appendFormat:@"%@,",string];

    }self.orderIds = [orderIdsStr copy];}

    谢谢!!!

    相关文章

      网友评论

        本文标题:iOS dispatch_async到主线程封装C接口

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