【iOS】单例模式

什么是单例模式

  • 简单的来说,一个单例类,在整个程序中只有一个实例,并且提供一个类方法供全局调用,在编译时初始化这个类,然后一直保存在内存中,到程序(APP)退出时由系统自动释放这部分内存。
  • 单例模式是一种常用的设计模式,对于一个单例类,必须保证任意时刻只有一个单例对象,并且自行实例化该对象,并向整个系统提供该对象,也就是说无论实例化单例对象多少次,都只能创建出一个对象,该对象是全局的能够整个系统所访问
  • 单例对象很像c语言中全局变量,单例类可以实现不同对象之间的数据共享

单例类举例

  • UIApplication(应用程序实例类)
  • NSNotificationCenter(消息中心类)
  • NSFileManager(文件管理类)
  • NSUserDefaults(应用程序设置)
  • NSURLCache(请求缓存类)
  • NSHTTPCookieStorage(应用程序cookies池)

单例类使用时机?

官方说法:

一个类必须只有一个对象。客户端必须通过一个众所周知的入口访问这个对象。
这个唯一的对象需要扩展的时候,只能通过子类化的方式。客户端的代码能够不需要任何修改就能够使用扩展后的对象。

举例说明:在建模的时候,如果这个东西确实只需要一个对象,多余的对象都是无意义的,那么就考虑用单例模式。比如,存储用户信息的用户管理类,在登录成功后,其它各个业务模块都可能用到。所以就会考虑用单例。

流程图

单例模式举例

  • 获取单例
@interface Singleon : NSObject
+ (instancetype)sharedSingle;
@end
  • + (void)load:加载类,每次程序启动,就会创建一个_instance的空间进去
  • 重写单例类的alloc方法保证这个类只会被初始化一次
#import "Singleon.h"
static Singleon *_instance = nil;

@implementation Singleon

+ (void)load {
    _instance = [[self alloc] init];
}

+ (instancetype)sharedSingle {
    NSLog(@"运行");
    return _instance;
}

+ (instancetype)alloc {
   //如果已经初始化了
    if (_instance) {
      NSException *exception = [NSException exceptionWithName:@"提示" reason:@"OneTimeClass类只能初始化一次" userInfo:nil];
      [exception raise];
    }
    return [super alloc];
}
@end

git

git地址:点击此处

单例模式有什么优缺点?

优点:

  • 在整个程序中只会实例化一次,所以在程序如果出了问题,可以快速的定位问题所在
  • 由于在整个程序中只存在一个对象,节省了系统内存资源,提高了程序的运行效率;

缺点:

  • 不能被继承,不能有子类
  • 不易被重写或扩展(可以使用分类)
  • 同时,由于单例对象只要程序在运行中就会一直占用系统内存,该对象在闲置时并不能销毁,在闲置时也消耗了系统内存资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值