我们通常使用单例的作用:
保证程序在运行过程中,一个类只有一个实例化对象,这个实例对象容易被外界访问!控制实例对象的个数(只有一个),节约系统资源
使用的场合:
在整个应用程序中,共享一份资源(这份资源只需要创建初始化一次).例如:一些网络工具类/沙盒类/打印机/视图窗口/等等
单例的种类:
分为懒汉式(用到时候在加载).恶汉式(程序已启动就加载)
单例实现方法:
互斥锁 dispatch_once
单例在内存中保存的位置:
static修饰的,存在常量区
单例的声明周期:
跟随着AppDelegate的销毁而销毁
单例需要重写方法:
模仿苹果源生的写法创建单例的方法名都是加shared+++xxx的一个形式,这个也是大家使用单例时默认的方法但是为了防止单例被使用alloc init的方法创建出来的需要重写 +(id)allocWithZone:(struct_NSZone*)zone(该方法在调用 alloc init方法时会自定调用,保证单例开辟一个空间)同时为了防止使用copy创建单例需要重写 +(id)copyWithZone:(struct_NSZone)zone 最后提供一个外界方法创建唯一的实例 +(instance)shared+xxxx;
在MRC模式中增加如下方法的实现:
-(instancetype)retain{return self;}
-(NSUInteger)retainCount{return 1;}
-(oneway void)release{}
-(instancetype)autorelease{return self;}