1、声明一个单例对象的静态实例,并初始化为nil;
2、创建一个类的工厂方法,生成发一个该类的实例,当且仅当这个类的实例为nil时覆盖allocWithZone方法,确保用户(程序员)在直接分配和初始化的时,不会产生另一个对象。
3、实现NSCopying协议,覆盖release,autorelease,retain,retain count方法,以此保证单例的状态
4、多线程的环境中,注意使用synchronized关键字,确保静态实例被正确的创建和初始化。
应用举例
UserContext.m
@interface UserContext :NSObject<NSCopying>
@property (nonatomic,copy)NSString *userName;
@property (nonatomic,copy)NSString *email;
+(id)shareUserContext;
@end
UserContext.m
staticUserContext *segtonInstance=nil;
@implementation UserContext
+(id)shareUserContext
{
@synchronized(self){
if (segtonInstance==nil) {
NSLog(@"调用单例");
segtonInstance=[[[selfclass]alloc]init];
}
}
returnsegtonInstance;
}
+(id)allocWithZone:(NSZone *)zone
{
if (segtonInstance==nil) {
segtonInstance=[superallocWithZone:zone];
}
returnsegtonInstance;
}
-(id)copyWithZone:(NSZone *)zone
{
return segtonInstance;
}