Singleton(宏单例写法)

#define SingletonInterface(name) +(instancetype)share##name

#if __has_feature(objc_arc)

// ARC
#define SingletonImplementation(name)                                                                                  \
    +(instancetype)share##name                                                                                         \
    {                                                                                                                  \
        return [[self alloc] init];                                                                                    \
    }                                                                                                                  \
    +(instancetype)allocWithZone : (struct _NSZone *)zone                                                              \
    {                                                                                                                  \
        static id instance;                                                                                            \
        static dispatch_once_t onceToken;                                                                              \
        dispatch_once(&onceToken, ^{                                                                                   \
            instance = [super allocWithZone:zone];                                                                     \
        });                                                                                                            \
        return instance;                                                                                               \
    }                                                                                                                  \
    -(id)copyWithZone : (NSZone *)zone                                                                                 \
    {                                                                                                                  \
        return self;                                                                                                   \
    }                                                                                                                  \
    -(id)mutableCopyWithZone : (NSZone *)zone                                                                          \
    {                                                                                                                  \
        return self;                                                                                                   \
    }
#else

// MRC
#define SingletonImplementation(name)                                                                                  \
    +(instancetype)share##name                                                                                         \
    {                                                                                                                  \
        return [[self alloc] init];                                                                                    \
    }                                                                                                                  \
    +(instancetype)allocWithZone : (struct _NSZone *)zone                                                              \
    {                                                                                                                  \
        static id instance;                                                                                            \
        static dispatch_once_t onceToken;                                                                              \
        dispatch_once(&onceToken, ^{                                                                                   \
            instance = [super allocWithZone:zone];                                                                     \
        });                                                                                                            \
        return instance;                                                                                               \
    }                                                                                                                  \
    -(id)copyWithZone : (NSZone *)zone                                                                                 \
    {                                                                                                                  \
        return self;                                                                                                   \
    }                                                                                                                  \
    -(id)mutableCopyWithZone : (NSZone *)zone                                                                          \
    {                                                                                                                  \
        return self;                                                                                                   \
    }                                                                                                                  \
    -(oneway void)release{} - (instancetype)retain                                                                     \
    {                                                                                                                  \
        return self;                                                                                                   \
    }                                                                                                                  \
    -(NSUInteger)retainCount                                                                                           \
    {                                                                                                                  \
        return MAXFLOAT;                                                                                               \
    }

#endif /* Singleton_h */


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

相关阅读更多精彩内容

友情链接更多精彩内容