背景
在有些時(shí)候,我們需要通過(guò)信號(hào)量來(lái)對(duì)block運(yùn)算和返回操作的順序進(jìn)行控制党晋,達(dá)到先完成block中的計(jì)算后斧抱,再返回值的效果。
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;
// 這個(gè)時(shí)候不加信號(hào)量監(jiān)聽(tīng)在block還沒(méi)回調(diào)賦值之前就return了
[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
if (settings.authorizationStatus == UNAuthorizationStatusAuthorized) {
notificationEnable = YES;
}
dispatch_semaphore_signal(signal);
}];
// 等待狀態(tài)獲取完成
dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER);
return notificationEnable;
} else {
UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if(UIRemoteNotificationTypeNone != type){
return YES;
}
}
return NO;
}