前言:
提及到“单例模式”,觉得该设计模式相对于其他设计模式还是很好理解的,而且用处也非常之大。
在 Java 的开发中,对于内存的概念不是很清晰,因为 Java 有着GC帮我们进行内存回收,而且项目也是运行在PC主机上。总感觉8G内存妥妥的,所以也就没有过于关注过内存的使用情况。所以一直觉得“单例模式”并无太大用处。
而在学习 iOS 的过程中发现原先不用考虑内存的情况变了,因为 iOS 手机的运行内存,让人必须去考虑内存分配的情况。原先觉得可有可无的“单例模式”到了 iOS 的开发中有了用武之处。
以上纯属个人见解。
概念:
“单例模式”是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。总结:
“单利模式”是为了保证某个类在系统只有一份,而提出的解决方案。
public class Singleton {
// 在其他类中屏蔽 new 创建该实例对象
private Singleton() {}
// 类加载的时候就会产生单利对象,static 关键字修饰
private static final Singleton single = new Singleton();
// 获取单利的方法
public static Singleton getInstance() {
return single;
}
}
以上代码所述的“单例模式”又称“饿汉单例”,还有一种“懒汉单例”;“饿汉单例”是不用考虑线程安全的。因为在类加载的时候就会执行 static 修饰的代码,这时候就完成了对象的初始化工作。
参考链接:http://blog.csdn.net/jason0539/article/details/23297037
+(Singleton *)shareSingleton(){
static Singleton *singleton = nil;
// 类似 Struts 的 token 验证
static dispatch_once_t p;
// 执行的时候会判断 p 是否使用过
dispatch_once(&p,^{
// 初始化对象
singleton = [[Singleton alloc]init];
});
return Singleton;
}
以上 OC 代码与以上 Java 代码效果类似,都是天生自备线程安全的。所以不用去担心线程安全的问题。
感谢互联网。因为互联网,让我们可以更好的站在巨人的肩膀上前行~