单例模式

一个单例类,在整个程序中只有一个实例,并且提供一个类方法供全局调用,在编译时初始化这个类,然后一直保存在内存中,到程序(APP)退出时由系统自动释放这部分内存。

优点:因为一直存在,所以加快了执行效率

缺点:不能被继承,不能有子类;不易被重写或扩展(可以使用分类);占用了内存资源不被释放。。

IOS中为了保持单利的唯一性。我们需要重写

copyWithZone、

mutableCopyWithZone、

allocWithZone(覆盖alloc,new,均会调用allocWithZone)

可普通实现和GCD实现

普通实现

+ (instancetype)shareInstance{

    return sigdemo;

}

staticidsigdemo;

//放入load 保障只执行一次。。

+ (void)load{

    sigdemo= [[selfalloc]init];

}

//alloc、new、都会调用此方法

+(instancetype)allocWithZone:(struct _NSZone *)zone{

    if(sigdemo==nil) {

        sigdemo= [superallocWithZone:zone];

    }

    return sigdemo;

}

//copyWithZone、mutableCopyWithZone拦截

- (id)copyWithZone:(NSZone*)zone{

    NSLog(@"%s",__func__);

    return sigdemo;

}

- (id)mutableCopyWithZone:(NSZone *)zone{

    NSLog(@"%s",__func__);

    return sigdemo;

}


GCD实现

//gcd实现

staticidsigdemo;

+ (instancetype)allocWithZone:(struct _NSZone *)zone{

    static dispatch_once_t tocken;

    dispatch_once(&tocken, ^{

        if(sigdemo==nil) {

            sigdemo= [superallocWithZone:zone];

        }

    });

    return sigdemo;

}

+ (instancetype)sharedInstance

{

    staticdispatch_once_tonceToken;

    dispatch_once(&onceToken, ^{

        sigdemo= [[selfalloc]init];

    });

    return sigdemo;

}

- (id)copyWithZone:(NSZone*)zone

{

    return sigdemo;

}

- (id)mutableCopyWithZone:(NSZone *)zone{

    return sigdemo;

}

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

相关阅读更多精彩内容

  • 单例模式的作用 可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问 从而方便地控制了实例个数,并...
    喝完酒再来杯拉菲阅读 182评论 0 1
  • 在ios中最常见的单例模式和代理模式。(设计模式) 1单例模式的作用: 在一个程序的运行过程中,一个类只能有一个实...
    小人不才阅读 1,735评论 0 1
  • 1.单例模式的要点: 显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自...
    mengyingguo阅读 412评论 0 0
  • 单例模式的作用 可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问 从而方便地控制了实例个数,并...
    JonesCxy阅读 419评论 0 0
  • 查看了网上十多个人的资料,整理了一下。1,单例有两种模式,一种为懒汉模式,一种为饿汉模式。饿汉模式需要在引入头文件...
    touch释然阅读 168评论 0 0

友情链接更多精彩内容