美文网首页
iOS设计模式之(1)——单例(Singleton)

iOS设计模式之(1)——单例(Singleton)

作者: 黄善军Jackie | 来源:发表于2018-05-16 12:04 被阅读20次

方法一

.h

/** 单例 */
+ (instancetype)sharedSingleton;

.m

static id _instance;

+ (instancetype)sharedSingleton
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[self alloc] init];
    });
    return _instance;
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [super allocWithZone:zone];
    });
    return _instance;
}

- (id)copyWithZone:(NSZone *)zone
{
    return _instance;
}

- (id)mutableCopyWithZone:(NSZone *)zone
{
    return _instance;
}

方法二 宏

// 在.h文件里使用
#define JWSingletonH(name) + (instancetype)shared##name;

// 在.m文件里使用
#define JWSingletonM(name) \
static id _instance; \
+ (instancetype)allocWithZone:(struct _NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
return _instance; \
} \
+ (instancetype)shared##name \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [[self alloc] init]; \
}); \
return _instance; \
} \
- (id)copyWithZone:(NSZone *)zone \
{ \
return _instance; \
} \
- (id)mutableCopyWithZone:(NSZone *)zone \
{ \
return _instance; \
}

相关文章

网友评论

      本文标题:iOS设计模式之(1)——单例(Singleton)

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