GCD 只执行一次 dispatch_once

dispatch_once函数能保证某段代码在程序中只被执行一次,即使在多线程环境下,也可以保证线程安全。

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
   
    //只执行1次的代码
});

把这个方法单独抽出成一个宏方法:

#define DEFINE_SHARED_INSTANCE_USING_BLOCK(block) \
static dispatch_once_t pred = 0; \
static id _sharedObject = nil; \
dispatch_once(&pred, ^{ \
_sharedObject = block(); \
}); \
return _sharedObject; \

常见用法:封装单例类

#import 

#define  APPGLOBARMANAGER [AppGlobarManager sharedInstance] //获取单例类对象

@interface AppGlobarManager : NSObject

+ (AppGlobarManager *)sharedInstance;//全局管理对象

@property (nonatomic, strong) NSString *username;//

@end

@implementation AppGlobarManager

+ (AppGlobarManager *)sharedInstance{
    
    DEFINE_SHARED_INSTANCE_USING_BLOCK(^{
        
        return [[self alloc] init];
    });
}

@end

在需要访问其 userName属性时:

NSString *username = APPGLOBARMANAGER.username;

如果本文对你有帮助记得点个喜欢哈

你可能感兴趣的:(GCD 只执行一次 dispatch_once)