美文网首页ios
单例模式

单例模式

作者: iOS_Cqlee | 来源:发表于2015-10-15 12:14 被阅读92次

    单例模式的作用

    可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问

    从而方便地控制了实例个数,并节约系统资源

    单例模式的使用场合

    在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次)

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

    #if __has_feature(objc_arc)

    //如果是ARC

    #define implementationSingle(name)+ (instancetype)share##name \

    { \

    return [[self alloc] init]; \

    } \

    static id _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; \

    }

    #else

    //如果不是ARC

    #define implementationSingle(name)+ (instancetype)share##name \

    { \

    return [[self alloc] init]; \

    } \

    static id _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; \

    }\

    - (oneway void)release \

    {} \

    - (instancetype)retain \

    { \

    return _instance; \

    } \

    - (NSUInteger)retainCount \

    { \

    return MAXFLOAT; \

    }

    相关文章

      网友评论

        本文标题:单例模式

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