美文网首页
单例模式

单例模式

作者: 彼岸的黑色曼陀罗 | 来源:发表于2016-10-13 21:26 被阅读0次

单例模式(掌握)

  • 单例模式
    • 作用
      • 可以保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界访问
      • 方便地控制了实例个数,并节约系统资源
    • 使用场合
      • 在整个应用程序中,共享一份资源(这个资源只需要创建初始化一次)
      • 网络请求工具类
      • NSFileManager defaultManager
      • UIApplication sharedApplication
  • 单例模式实现
    • 1.创建一个继承NSObject的图片下载工具类
    • 2.工具类创建出来的对象永远都是同一个对象
      • alloc]init
        • alloc:分配存储空间
        • init:初始化
      • 重写alloc方法
        • 类方法
          • alloc方法内部会调用allocWithZone:
          • allocWithZone:
        • 重写allocWithZone:
          • 先判断是否分配过存储空间
        • 定义静态变量,分配存储空间
    • 3.提供一个类方法,方便外界访问(身份标识)
      • 规范:share+类名 | share | default |manager
创建一个静态变量:分配存储空间
static DownloadTool *_instance;
@synchronized(self){
    if(_instance == nil){
_instance = [super allocWithZone:zone];
                }
    return _instance
}       
提供一个类方法
规范:share+类名 | share | default |manager
+(instancetype)shareDownloadTool{
    return [[self alloc]init];
}
  • 问题:如何让变量私有化,作用域只在当前类,外部不可以使用
    • 可以加static
  • 问题:异步函数+全局并发队列,在block里面创建工具类,开多条线程并发执行任务,比如开线程A/B,第一次Ainstance没有值,B进来instance也没有值,分配了两次存储空间。
    • 加同步锁,@synchronized(self){}
    • GCD的一次性代码
      • dispatch_once(&onceToken,^{_instance = [super allocWithZone:zone];})
  • 4.单例模式实现更严谨需要重写copy|mutablecopy方法
    • 遵守<NSCoping,NSMutableCoping>
    • 调用copy方法,需要对象调用
-(id)copyWithZone:(NSZone*)zone{
 return _instance;
}
-(id)mutableCopyWithZone:(NSZone*)zone{
 return _instance;
}

简洁单例模式(不完全单例模式)

  • 创建工具类
  • 提供一个类方法
+(instancetype)shareTool{
  static Tool * _instance;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken,^{
   _instance = [[self alloc]init];
})
   return _instance
}
  • 使用前提
    • 必须要调用类方法
  • 开发中,如果时间比较紧张压力比较大,可以使用这种方法,如果是独自开发,也可以使用这种方式;但是,如果是多人开发,建议使用完整的单例模式实现方式

相关文章

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • Telegram开源项目之单例模式

    NotificationCenter的单例模式 NotificationCenter的单例模式分析 这种单例模式是...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • 单例模式

    单例模式1 单例模式2

  • java的单例模式

    饿汉单例模式 懒汉单例模式

网友评论

      本文标题:单例模式

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