iOS dispatch_semaphore semaphore use (return sequence control)

background

In some cases, we need to control the sequence of block operations and return operations through semaphores to achieve the effect of returning the value after completing the calculation in the 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;
}

Add WeChat: FBY-fan responds to " interview questions " and receives 11 types of interview questions, including: multithreading, memory management, design patterns, data security and encryption, data results and algorithms, networks, performance optimization, Block, RunLoop, Runtime, UI related

Insert picture description here

Pay attention to the official account : Swift community for more resources

Guess you like

Origin blog.csdn.net/qq_36478920/article/details/115001793