美文网首页
iOS单例模式(SingletonPattern)

iOS单例模式(SingletonPattern)

作者: imwudi | 来源:发表于2016-07-30 09:07 被阅读23次

    ①定义
    单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

    ②优缺点
    优点:为频繁访问的第三方工具提供了唯一的实例,从而节约系统资源,不用再频繁地创建和销毁对象,无疑提高了系统的性能。

    缺点:不可过多的创建单例,因为单例从创建后到彻底关闭程序前都会一直存在,如果过多的创建单例无疑浪费系统资源和影响系统效率。

    ③代码实现
    创建一个对象是先调用alloc方法分配对象内存,再调用init方法进行初始化,那么实现单例,重写allocWithZone:方法就可以了,用GCD的dispatch_once函数是比较简单的一种方式,因为有一个dispatch_once_t类型参数能保证只执行一次。

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

    ④宏定义单例模式
    如果多个类要实现单例模式,我们可以定义个一个头文件SingletonPattern.h,里面定义两个宏,分别是声明与实现。

    
    #ifndef SingletonPattern_h
    
    #define SingletonPattern_h
    
    #define WD_SINGLETON_PATTERN_INTERFACE(name) +(instancetype)shared##name;
    
    #define WD_SINGLETON_PATTERN_IMPLEMENTATION(name) +(instancetype)shared##name {\
    
    return [[self alloc] init];\
    
    }\
    
    + (instancetype)allocWithZone:(struct _NSZone *)zone {\
    
    static dispatch_once_t onceToken;\
    
    static id instance;\
    
    dispatch_once(&onceToken, ^{\
    
    instance = [super allocWithZone:zone];\
    
    });\
    
    return instance;\
    
    }\
    
    //- (id)copyWithZone:(NSZone *)zone {\
    
    //return self;\
    
    //}
    
    #endif
    
    

    实现单例,只要导入头文件"SingletonPattern.h",

    在.h文件写WD_SINGLETON_PATTERN_INTERFACE(类名),

    在.m文件写WD_SINGLETON_PATTERN_IMPLEMENTATION(类名),就可以了。

    相关文章

      网友评论

          本文标题:iOS单例模式(SingletonPattern)

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