iOS dispatch_semaphore 信号量使用(返回顺序控制)

背景

在有些时候,我们需要通过信号量来对block运算和返回操作的顺序进行控制,达到先完成block中的计算后,再返回值的效果。

Example
/// #import <UserNotifications/UserNotifications.h>

- (BOOL)cj_chekEnableOfNotify {
    
    if (@available(iOS 8.0,*)) {
        dispatch_semaphore_t signal;
        signal = dispatch_semaphore_create(0);
        __block BOOL notificationEnable = NO;
        // 这个时候不加信号量监听在block还没回调赋值之前就return了
        [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
            if (settings.authorizationStatus == UNAuthorizationStatusAuthorized) {
                notificationEnable = YES;
            }
            dispatch_semaphore_signal(signal);
        }];
        // 等待状态获取完成
        dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER);
        return notificationEnable;
    } else {
        UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
        if(UIRemoteNotificationTypeNone != type){
            return YES;
        }
    }
     return NO;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容