美文网首页
iOS dispatch_semaphore 信号量使用(返回顺

iOS dispatch_semaphore 信号量使用(返回顺

作者: Cingjin | 来源:发表于2020-04-17 11:37 被阅读0次

    背景

    在有些时候,我们需要通过信号量来对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;
    }
    

    相关文章

      网友评论

          本文标题:iOS dispatch_semaphore 信号量使用(返回顺

          本文链接:https://www.haomeiwen.com/subject/yvjevhtx.html