单例,是Cocoa的核心模式之一,我们经常使用到,比如UIApplication , NSFileManger。
单例模式:一个类只有一个实例化对象,只提供一个全局访问点。全局只有一个实例,只从一个地方访问,使用起来就非常的简单方便,保证了访问点的唯一性和一致性,很容易为人熟知。
但是单例是没有从属的,自己管理自己的生命周期,等同于程序的生命周期,在程序运行过程中一直存在。这样说来的话,就有一些弊端在里边,我们知道我们忌讳全局可变化状态,很有可能单例在全局使用,被多个地方被调用,而且是不用声明从属的,一旦你轻易的改变其中一个属性的值,可能会影响局部的程序执行结果,程序会出错,因为你不确定在什么被调用或者在哪调用过。这样程序中,两个好无联系的模块,可能会存在隐藏的耦合性。
也正是因为单例的全局性和状态性,需要我们谨慎的去使用单例。在面向对象的编程中,我们需要尽可能减少可变状态的作用域,而单例与这个思想是背道而驰,下次使用单例考虑一下是否这个变量真正值得成为一个单例,尽力减少模块之间的耦合性。