单例模式是iOS中常用的一种设计模式。单例模式是一个类在系统中只有一个实例对象,通过全局的一个入口点对这个实例对象进行访问。
在程序中,单例模式经常只希望一个类中有一个实例,而不运行一个类还有两个以上的实例,当然,在iOS SDK中,根据特定的需求,有些类不仅提供了单例访问的接口,还为开发者提供了实例化一个新的对象接口。
iOS中单例模式的实现方式一般分来两种:Non-ARC(非ARC)和ARC+GCD
Swift
1.
let _SingletonSharedInstance = Singleton()
class Singleton {
class var sharedInstance : Singleton {
return _SingletonSharedInstance
}
}
2.
class Singleton {
class var sharedInstance : Singleton {
struct Static {
static let instance : Singleton = Singleton()
}
return Static.instance
}
}
3.
class Singleton {
class var sharedInstance : Singleton {
struct Static {
static var onceToken : dispatch_once_t = 0
static var instance : Singleton? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = Singleton()
}
return Static.instance!
}
}
OC
1.
//当多线程时,该方法会出现线程安全问题,不建议
+(instancetype)sharePerson{
static Person *p = nil;
if (p == nil) {
p = [[Person alloc] init];
}
return p;
}
2.
+(instancetype)defaultPerson{
static Person *p = nil;
//加锁,线程安全。官方推荐的单例实现方式之一
@synchronized (p) {
p = [[self alloc] init];
}
return p;
}
3.
+(instancetype)sharePerson1{
static Person *p = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//block体中的代码只会被执行一遍,这个对象p只会被创建一次,所以也是纯种安全的,官方推荐的单例实现方式之一
p = [[Person alloc] init];
});
return p;
}
网友评论