步骤
1.声明一个单例对象的静态实例,并初始化为nil
2.在该类的类工厂方法(名称类似于shareInstance 、shareManager或以default为前缀)中生成该类的一个实例仅当静态实例为nil的时候
3.重载allocWithZone:方法,确保当前用户试图直接(而不是通过类工厂方法)分配或初始化类的实例时,不会分配出另一个对象。
4.实现基本的协议方法:copyWithZone、release、retain、retainCount和autoRelease,以保证单例的状态
以上为全部四个步骤,一般 3、4 无需理会。
(推荐)常用实例写法一(ContactManager.h、ContactManager.m)
(block + 大中枢派发机制)
ContactManager.h:
@interface AddContactManager : NSObject
+ (AddContactManager*)defultManager;//类工厂方法
@end
ContactManager.m:
static AddContactManager *_defaultManagerInstance = nil; //静态实例
@implementation ContactManager
+(AddContactManager*)defultManager
{
@synchronized(self) { //锁同步
static dispatch_once_t pred;
dispatch_once(&pred, ^{
_defaultManagerInstance = [[self alloc] init];
});
}
return _defaultManagerInstance;
}
//初始化
-(id)init
{
self = [super init];
if(self) {
}
return self;
}
@end
常用实例写法二(ContactManager.h、ContactManager.m)
ContactManager.h:
@interface AddContactManager : NSObject
+ (AddContactManager*)defultManager;//类工厂方法
@end
ContactManager.m:
static AddContactManager *_defaultManagerInstance = nil; //静态实例
@implementation ContactManager
+(AddContactManager*)defultManager
{
@synchronized(self) { //锁同步
if(_defaultManagerInstance == nil){
_defaultManagerInstance = [[self alloc] init];
}
}
return _defaultManagerInstance;
};
//初始化
-(id)init
{
self = [super init];
if(self) {
}
return self;
}
@end
推荐一