singleton pattern是我们常用的一种设计模式。
在ios开发中,主要使用singleton的类处理业务逻辑,比如数据库的查询操作。这样在开发过程中将业务逻辑与界面分开。在任意controller中统一使用这个singleton的class的方法进行数据操作。
官方推荐的写法是通过gcd的dispatch_once方法实现。这种效率较高,gcd的方式完全能体现现在apple的多核产品的性能,最大限度的利用多核cpu。个人非常推荐ios app应用开发的时候采用gcd的多线程方式写法。据说ios sdk 中 UIApplication等就是这样实现的。写起来也相对方便。实现方法如下:
+ (myClass *)sharedInstance
{
static dispatch_once_t onceToken;
static myClass * sSharedInstance;
dispatch_once(&onceToken, ^{
sSharedInstance = [[myClass alloc] init];
});
return sSharedInstance;
}
还有一种就是类似于传统的java或者actionScript等实现方式,定义全局的static变量,判断变量是否有为nil。在ios中由于多线程开发的常见,为避免线程冲突,加上@synchronized,保证线程安全。实现方法如下:
static MyClass *sSharedInstance= nil;
+ (MyClass *)sharedInstance
{
@synchronized(self) {
if (sSharedInstance == nil) {
sSharedInstance=[[self alloc] init];
}
}
return sSharedInstance;
}