iOS开发之单例
单例介绍
1.什么是单例
单例模式是一种常用的软件设计模式。在它的核心结构中包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果系统在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
2.单例用处
应用场景:
确保程序运行期某个类,只有一份实例,用于进行资源共享控制。
优势:
使用简单,延时求值,易于跨模块
iOS的系统中用到的一些单例
iOS单例的创建
1.单线程单例
单例类需要保证只有一个实例,因此在第一次访问这个实例的时候才创建,之后访问直接取已经创建好的实例
dispatch_once为什么能做到既解决同步多线程问题
dispatch_once的原理:
dispatch_once主要是根据onceToken的值来决定怎么去执行代码。
1.当onceToken = 0时,线程执行dispatch_once的block中代码
2.当onceToken = -1时,线程跳过dispatch_once的block中代码不执行
3.当onceToken为其他值时,线程被阻塞,等待onceToken值改变
当线程调用shareInstance,此时onceToken = 0,调用block中的代码,此时onceToken的值变为140734537148864。当其他线程再调用shareInstance方法时,onceToken的值已经是140734537148864了,线程阻塞。当block线程执行完block之后,onceToken变为-1.其他线程不再阻塞,跳过block。下次再调用shareInstance时,block已经为-1.直接跳过block。
dispatch_once设计挺巧妙的。