在程序开发过程中,我们总会遇到一些情况,要求我们有一个类只有一个实例,这种情况下,我们就需要使用单例模式。今天我们就来学习一下这个模式。
转载请注明出处:http://blog.csdn.net/developer_zhang
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式应该是23种设计模式中最简单的一种模式了。它有以下几个要素:
单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例。饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用;而懒汉式在调用取得实例方法的时候才会实例化对象。
由于单例模式的以上优点,所以是编程中用的比较多的一种设计模式。我总结了一下我所知道的适合使用单例模式的场景:
在IOS中单例模式最常见的只有懒汉模式。根据线程安全的实现来区分,一种是使用@synchronized,另一种是使用GCD的dispatch_once函数。
要实现单例,首先需要一个static的指向类本身的对象,其次需要一个初始化类函数。下面是两种实现的代码。
//synchronized方式单例 +(SingletonModel*)shareInstance { @synchronized(self){ if (singleton==nil) { singleton = [[SingletonModel alloc] init]; } } return singleton; }
//GCD方式 +(SingletonModel*)shareInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken,^{ singleton = [[SingletonModel alloc] init]; }); return singleton; }
总的来说,两种实现效果相同,但第二种GCD的实现方式写起来比较简单。如果不习惯GCD的方式,可以使用第一种方式。
以上是所有内容,希望对大家有所帮助。
代码下载地址:http://download.csdn.net/detail/u010013695/6955121
原文:http://blog.csdn.net/developer_zhang/article/details/19809947