ios开发进阶程序员征服iOS

iOS dispatch_async到主线程封装C接口

2017-09-23  本文已影响152人  石虎132

//联系人:石虎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];}

谢谢!!!

上一篇 下一篇

猜你喜欢

热点阅读