单例模式是程序开发中一种设计模式,是前人在多年开发经验中,总结出来的一套有助于提高开发效率的方法。
单例模式的作用:保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界访问。从而方便地控制了实例个数,并节约系统资源。
应用场合:在整个应用程序中,共享一份资源。
我们通过例子来看看,利用touchBegan方法,创建几个对象,要使用单例模式,需要重写系统alloc方法。
ARC环境下:
1、先创建一个对象ZZHTool,定义一个全局变量instance,在allocWithZone方法中,重写alloc方法。为了防止多线程安全访问问题,可以使用互斥锁或者GCD的一次性代码。如下所示:
2、提供类方法,好处就是方便访问,标明身份,一般的命名规范:share+名字,为了严谨,还会重写copy和mutablecopy方法,但得先遵守NSCopying和NSMutableCopying两个协议。如下所示:
3、我们在控制器中,在touchBegan方法中使用单例,如下所示:
我们发现,使用单例模式创建对象之后,打印出来的每个对象的地址都是一样的,所有的对象共享一份资源。
MRC环境下:
现在用MRC环境下来写单例模式,首先先把环境更改过来,如图:
控制器中的代码不变,依然创建几个对象,代码如图:
3、依然创建一个ZZHTool的对象,在里面重写方法。
由于MRC环境下,我们需要手动内存管理,由于单例模式是共享一份资源,所以,不能在控制器直接对对象进行release或者retain,需要在单例中重写release和retain方法,代码如图:
在非ARC环境下,retainCount一般都直接返回MAXFLOAT。
4、最后打印出来的结果,依然是一样的地址。
总结:现在iOS开发都是在ARC环境下进行,但在面试中或者在一些比较旧的项目,可能还会碰到MRC的问题,需要我们去多方面的了解,才能够更好的解决问题!