iOS 中单例设计模式的解读

概念

在整个项目中只有一份内存,并不会分配很多内存,这个类的对象只能被初始化一次

单例的使用

方式一:不考虑线程

示例:
+ (instancetype)shareInstance {
    static LYUserManager *userManager;
    if(!userManager){
        userManager = [[LYUserManager alloc] init];
        
    return userManager;
       }
}

方式二:考虑线程

  • 声明一个静态变量去保存类的实例,确保它在类中的全局可用性
  • 声明一个静态变量dispatch_once_t,它确保初始化代码只执行一次
示例:
+ (instancetype)shareInstance {
    static LYUserManager *userManager;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        userManager = [[LYUserManager alloc] init];
    });
    
    return userManager;
}

单例的优化并设置断言

通过上面的方法,我们已经可以使用类方法来得到这个单例,但是如果是多人开发此项目,为了安全与管理代码的方便,也为了给不是这个单例的创作者但会用到这个单例的开发人员一些提示,让任何视图通过alloc创建对象的程序段断在此处,给程序员提示.我们通常会重写一些方法:
示例:

+ (instancetype)alloc{
    NSAssert(0, @"这是一个单例对象,请使用+(LYUserManager *)shareInstance方法");
    return nil;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    return [self shareInstance];
}
+ (instancetype)new{
    return [self shareInstance];
}

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

推荐阅读更多精彩内容

  • 一个简单的单例示例 单例模式可能是大家经常接触和使用的一个设计模式,你可能会这么写 publicclassUnsa...
    Martin说阅读 6,760评论 0 6
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,486评论 11 349
  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 9,858评论 4 34
  • 1、速率 2、带宽 3、延时/时延 四种分组延迟: 4、排队延迟 5、时延带宽积 6、分组丢失(丢包) 7、吞吐量
    寒冰豌豆阅读 2,870评论 0 0
  • 本人学生,原本打算养一只金毛,朋友说,现在没有经济来源,养不活狗狗,等以后有自己有工作了再养也不迟。我一想呀,确实...
    oO0啦啦阅读 2,507评论 0 0

友情链接更多精彩内容