单例的实现

一、使用GCD实现

// .h文件
#define LYSingletonH + (instance)sharedInstance;
// .m文件
#define LYSingletonM \
static id _instance; \
\
+ (instancetype)allocWithZone:(struct _NSZone *)zone \
{ \
        static dispatch_once_t onceToken; \
        dispatch_once(&onceToken, ^{ \
                 _instance = [super allocWithZone:zone] \
        }); \
        return _instance; \
} \
\
+ (instancetype)sharedInstance \
{ \
        static dispatch_once_t onceToken; \
        dispatch_once(&onceToken, ^{ \
                _instance = [super allocWithZone:zone]; \
        }); \
        return _instance; \
} \
 \
- (id)copyWithZone:(NSZone *)zone \
{ \
        return _instance; \
}

二、加锁实现

static id _instance;
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
        @synchronized(self) {
                if (_instance == nil) {
                        _instance = [super allocWithZone:zone];
                }
        }
        return _instance;
}
+ (instancetype)sharedInstance
{
        @synchronized(self) {
                if (_instance == nil) {
                        _instance = [super allocWithZone:zone];
                }
        }
        return _instance;
}
- (id)copyWithZone:(NSZone *)zone
{
        return _instance;
}

附:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们知道单例是在整个工程当中只有一个该类实例,怎么才能保证每次都只返回一个实例而不是另外一个实例呢? 单例是一个对...
    追沐阅读 8,357评论 0 5
  • 在IOS中单例设计模式有很广泛的用途,它保证一个类只有一个实例,并提供一个访问它的全局访问点,一个app只有一个实...
    Chivalrous阅读 1,418评论 0 0
  • 在IOS中单例设计模式有很广泛的用途,它保证一个类只有一个实例,并提供一个访问它的全局访问点,一个app只有一个实...
    sunmumu1222阅读 1,441评论 0 0
  • 零 烫烫烫烫烫烫 单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个...
    罗力阅读 9,119评论 0 2
  • 此刻,躺在酒店舒服的床上,虽然有些疲惫,但还是要和大家分享今日旅途所见。 2017年9月20日,晨7点出发,新都桥...
    熊童子csh阅读 1,756评论 0 1

友情链接更多精彩内容