Singleton 单例模式
转http://blog.csdn.net/remote_roamer/article/details/7107007
Singleton 单例模式,在项目中数据库方面代码用到,应用了 Singleton 单例模式的类会保证同时只有一个对象存在,可以全局调用,项目中用于资源共享控制,可以让数据库的操作函数变成一种全局资源,不同的类都可以调用。
总的来说,实现一个单例类需要几点:
1.静态实例:初始化静态实例
2.构造方法:根据静态实例是否存在来决定新建实例还是返回实
3.重写allocWithZone防止重复创建对象(可选)
首先头文件:
#import <UIKit/UIKit.h>
#import <sqlite3.h>
@interface OperationalDatabase : NSObject{//新建直接继承NSObject的类
sqlite3 *database;
}
+ (OperationalDatabase *) defaultManager;//声明静态实例
//////////////////////////数据库的基本操作//////
-(void)openDatabase;
-(void) close;
///////////获取数据
-(NSArray *)getAreaArray;
-(NSString *)getAreaByCity:(NSString *)city;
-(NSArray *)getCityArray:(NSString *)area;
-(NSArray *)getAllCityArray;
-(NSArray *)getSystemArray:(NSString *)city;
-(NSArray *)getAllShopTypeArray:(NSString *)city;
-(NSArray *)getShopTypeArrayFromCityAndSystem:(NSString *)city System:(NSString *)system;
@end
#import “OperationalDatabase.h”
#import “SQL.h”
#import “JSON.h”
@implementation OperationalDatabase
static OperationalDatabase *defaultManager; //静态实例
+ (OperationalDatabase *) defaultManager{//构造方法,如果不存在实例就初始化
if (!defaultManager) {
defaultManager=[[OperationalDatabase alloc] init];
[defaultManager openDatabase];
}
return defaultManager;
}
//各种数据库方法的实现
-(void)openDatabase
{
}
-(void) close
{
}
-(int)getIdCount{
}
没写allocWithZone的原因是,项目比较小,也没涉及到多线程概念,对象的使用和创建我可控。接下来是使用这个单例类,比如这里我想要获得ID的数量,需要做的是:
#import “OperationalDatabase.h”//引入单例类头文件
……..
//想获取ID数量的位置引用单例对象
NSString *idCount=[[OperationalDatabase defaultManager] getIdCount];
所以单例类用法类似于一个全局变量的用法,引用头文件就像extern声明,然后调用构造函数和具体方法就可以了