简介

单例模式的定义

  • 简单的来说,一个单例类,在整个程序中只有一个实例,并且提供一个类方法供全局调用,在编译时初始化这个类,然后一直保存在内存中,到程序(APP)退出时由系统自动释放这部分内存。
  • 单例只能初始化一次,重复初始化单例类会直接崩溃报错

哪些地方会用到单例模式

  • 工具类 公共跳转类 经常调用的类 (掌邮的HttpClient)

系统为我们提供的单例类

  • UIApplication
  • NSNotificationCenter
  • NSFileManager
  • NSUserDefaults
  • NSURLCache
  • NSHTTPCookieStorage

实现单例模式

1个类的对象,无论在何时创建也无论在什么地方创建也无论创建多少次,创建出来的都是同1个对象。

2.无论如何创建对象,最终都会调用alloc方法来创建对象,
alloc方法的内部,其实什么都没有做,只是调用了allocWithZone:方法 实际上真正申请空间创建对象的事情是allocWithZone:方法
重写+allocWithZone:

  1. + (instancetype)allocWithZone:(struct_NSZone *)zone
  2. {
  3. static id instance = nil;
  4. if(instance == nil)
  5. {
  6. instance = [super allocWithZone:zone];
  7. }
  8. return instance;
  9. }

单例模式的规范

如果类是1个单例模式.要求为类提供1个类方法.来返回这个单例对象。类方法的名称必须以shared类名;default类名; 实现都是 return [self new];

什么时候需要单例的类

1.单例的特点
无论何时、何地、创建对象,也不管创建多少次对象,得到都是同1个对象。单例对象可以被共享,存储在单例对象中的数据可以被共享。
也就是无论在什么地方创建单例对象访问的都是同1个对象。

2.做游戏:
游戏面板的宽度:800

游戏面板的高度:600
这两个数据基本上在很多的地方都会使用到。

如果数据需要被整个程序所共享,将数据以属性的方式存储在单例对象中.