iOS学习笔记-单例模式

一、基本知识点
1、什么是单例模式

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

2、系统提供的单例类
UIApplication(应用程序实例类)
NSNotificationCenter(消息中心类)
NSFileManager(文件管理类)
NSUserDefaults(应用程序设置)
NSURLCache(请求缓存类)
NSHTTPCookieStorage(应用程序cookies池)
3、在哪些情况下会用到单例模式

经常调用的类,入工具类、公共跳转类等,可以采用单例模式。

4、是否可以重复初始化单例类?

一个单例类只能被初始化一次。

二、单例类的生命周期
1、不同变量在存储器中位置
位置 存放的变量
临时变量(由编译器管理自动创建/分配/释放的,栈中的内存呗调用时处于存储空间中,调用完毕后由系统自动释放内存)
通过alloc、calloc、malloc或new申请内存,由开发者手动调用之后通过free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后释放掉动态内存,在ARC模式下,由系统自动管理
全局区域 静态变量(编译时分配,APP结束时由系统释放)
常量 常量(编译时分配,APP结束时由系统释放)
代码区 存放代码
2、单例实例在存储器中位置

在程序中,一个单例类在程序中只能初始化一次,为了博阿正在使用中始终都是存在的,由上表可以看出,单例是存储在 全局区域 的,在编译时分配内存,只要程序还在运行就会一只占用内存,在APP结束后由系统释放这部分内存。

三、单例类创建
1、单例模式的创建方式

考虑数据和线程问题,苹果官方推荐开发者使用来创建单例。

static OneTimeClass *__onetimeClass;
+ (OneTimeClass *)sharedOneTimeClass {
static dispatch_once_t oneToken;

    dispatch_once(&oneToken, ^{

        __onetimeClass = [[OneTimeClass alloc]init];

    });
    return __onetimeClass;
}
四、单例模式的优缺点
1、优点

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

2、缺点

(1)不能被继承、不能有子类。
(2)不易被重写或扩展(可以使用分类)。
(3)由于单例对象只要程序在运行中就会一直占用系统内存,该对象在闲置时并不能销毁,在闲置时也消耗了系统内存资源。

你可能感兴趣的:(iOS学习笔记-单例模式)