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