美文网首页
GCD 只执行一次 dispatch_once

GCD 只执行一次 dispatch_once

作者: Geniune | 来源:发表于2018-12-15 10:08 被阅读17次

    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 <Foundation/Foundation.h>
    
    #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

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