博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之-单例
阅读量:7081 次
发布时间:2019-06-28

本文共 1013 字,大约阅读时间需要 3 分钟。

单例模式是什么?

单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。单例模式的要点有三个:
  • 单例类只能有一个实例。

  • 单例类必须自己创建自己的唯一实例。

  • 单例类必须给所有其他对象提供这一实例。

单例模式的使用场合
  • 类只能有一个实例,并且必须从一个为人数值的访问点对其访问。

  • 这个唯一的实例只能通过子类化进行拓展,并且拓展的对象不会破坏客户端代码。

类图

clipboard.png

时序图

clipboard.png

如何实现单例

在Objective-C中方法都是公有的,而且OC的语言本身是动态类型的,因此所有类都可以相互发送对方的消息,而没有太多的编译时检查,而且Cocoa框架使用计数的内存管理方式来维护对象的内存中的生存期。所有这些特性使得Object-C中实现单例模式颇具挑战性。
步骤
  • 在类的内部提供一个static修饰的全局变量

  • 提供一个类方法,方便外界访问

  • 重写+allocWithZone方法,保证永远都只为单例对象分配一次内存空间

  • 严谨起见,重写-copyWithZone方法和-MutableCopyWithZone方法

代码实现
+ (instancetype)sharedInstance{    @synchronized (self) {        if (_instance == nil) {            _instance = [[super allocWithZone:NULL] init];        }    }    return _instance;}+ (instancetype)allocWithZone:(struct _NSZone *)zone{    return [self sharedInstance];}- (id)copy{    return _instance;}- (id)mutableCopy{    return _instance;}

这是一个严格的单例实现,但是存在一个问题,欢迎留言指出。

当然也可以使用GCD方式实现,不过这里只做演示

static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{            });

转载地址:http://rsvml.baihongyu.com/

你可能感兴趣的文章
类的属性总结
查看>>
在64位Win7下为HP LaserJet 1012安装网络打印机驱动
查看>>
电子邮件地址策略
查看>>
如何快速安装Webmin(linux系统web管理配置工具)
查看>>
PHP带头大哥学习的三部曲!
查看>>
apache忽略文件后缀
查看>>
Makefile 使用总结【转】
查看>>
Linux 基本网络编程
查看>>
ASP.Net 4.0中新增加的23项功能[转]
查看>>
spin_lock、spin_lock_irq、spin_lock_irqsave区别【转】
查看>>
网络翻译实现
查看>>
网络常用的linux系统调用
查看>>
浅谈c#泛型类型变量作为操作数使用的通用解决方法
查看>>
python线程的使用模式
查看>>
beginner项目
查看>>
强制 history 不记住特定的命令
查看>>
C#线程系列讲座(2):Thread类的应用
查看>>
从Objective-C到Swift,你必须会的(四)DLog
查看>>
在Ubuntu 桌面版 12.04 LTS安装并运行SSH
查看>>
Oracle EBS R12.1 版本各种开启及关闭操作
查看>>