欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS 回到主线程的宏定义用法

程序员文章站 2022-05-29 08:28:54
...

在iOS开发中,有的时候会想在block回调中显示Tost弹框,但是,iOS系统不赞成在异步回调里操作UI,这个时候,有个宏定义方法可以利用判断直接回到主线程,使用代码如下:

宏定义代码

#define wy_dispatch_main_sync_safe(block)\
if ([NSThread isMainThread]) {\
block();\
} else {\
dispatch_sync(dispatch_get_main_queue(), block);\
}

 

使用示例

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{     
//       写入图片到相册
         PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
        
     } completionHandler:^(BOOL success, NSError * _Nullable error) {
         NSLog(@"success = %d, error = %@", success, error);
         if(success) {
             tl_dispatch_main_sync_safe(^{
                 [WHToast showSuccessWithMessage:@"保存成功" duration:1 finishHandler:^{
                     
                 }];
             });
         }
    }];