单例有什么用?单例就是说在程序运行过程中逻辑上保持唯一性的对象。什么时候会用到单例呢,几乎所有工程都应该用到单例,因为不论任何程序在设计的时候都需要设计自己的model层,模型会有很多但是肯定需要一个模型代表自己的程序本身,然后引用一大堆程序本身唯一的东西,比如程序当前的用户信息,当前的缓存信息,甚至是程序主要数据结构的基础对象,比如做一个电子书应用,书库肯定是一大堆书的信息,那么书库本身就是唯一的,我在程序很多地方都需要对书库进行操作,比如入库,比如出库比如和网络书库同步刷新,又比如缓存书库里的内容,我需要一个全局的并且唯一的对象,那么就应该用单例
static BookStore* aSharedBookStore = nil; // implement static instance +(BookStore *) sharedBookStore{ @synchronized(self){ if (aSharedBookStore == nil) { aSharedBookStore = [[self alloc] init]; } } return aSharedBookStore; }
这里要提到@synchronized(){}, 这个是一个互斥锁,说起这个就要讨论另一个复杂庞大的部分,多线程,和线程同步,别的日志再写。
在这里这么写就是为了保证单例的创建过程是唯一的,执行一次之后就再不执行了,因为多线程的问题,一段代码可能会在多个线程中被同步执行,如果不做互斥锁就会引起singleton的对象被创造多个,那么就失去单例的意义了。
另一个要提到self,self是iOS动态特性的一个体现,self会在运行时进行检查,决定self是代表自身还是self.class, 所以你会发现在静态方法(类方法中)self 可以直接调用其他类方法。而在动态方法中 self又可以调用成员方法,所以某些条件下self和[self class]等效。