iOS dispatch_async到主线程封装C接口

//联系人:石虎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多线程浅汇-原理篇中整理了一些有关多线程的基本概念。本篇博文介绍的是iOS中常用的几个多...
    nuclear阅读 6,240评论 6 18
  • 背景 担心了两周的我终于轮到去医院做胃镜检查了!去的时候我都想好了最坏的可能(胃癌),之前在网上查的症状都很相似。...
    Dely阅读 13,034评论 21 42
  • 一、前言 本篇博文介绍的是iOS中常用的几个多线程技术: NSThread GCD NSOperation 由于a...
    和珏猫阅读 3,658评论 0 1
  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 4,292评论 0 3
  • #import "ViewController.h" @interface ViewController () @...
    艾克12138阅读 1,924评论 0 0