IOS设计模式之我见-单例模式

来源:互联网 发布:java 获取pom 版本号 编辑:程序博客网 时间:2024/06/08 00:11

单例模式应该是23种设计模式中最简单但是最常用的一种设计模式,它依靠特殊的方法返回该类的唯一的实例。单例模式目的是减少频繁创建对象所需要的资源和在初始化后实现对象快速的访问。如果我们需要经常访问某一个类对象的属性或者方法就有必要考虑是否需要采用单例模式。单例模式是利用静态变量的属性存在内存中的静态区静态变量在应用程序启动后就已由系统分配完成,程序结束由系统就行回收,它保存着对这一实例的唯一引用,通过唯一的类方法获取到该实例。与此类事我们可以使用静态的全局对象引用和类方法实现对唯一实例的引用和资源的访问,但是全局对象方法不能保证对象只被实例化一次,类方法缺少消除类之间耦合的灵活性。在cocoa touch 中由我们常见的如UIApplication,NSFileManager等单例类。

单例模式的objective-c实现形式:

static Singleton* singleton = nil;

+(Singleton *)sharedInstance

{

@synchronized(self)

{

if(singleton == nil)

{

singleton = [ [super allocWithZone:NULL] init];

}

return singleton;

}

return nil;

}

+(id)allocWithZone:(NSZone *)zone

{

@synchronized(self)

{

return [ [self sharedInstance] retain];

}

return nil;

}

-(id)copyWithZone:(NSZone *)zone

{

return self;

}

单例模式的宏定义:

#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \

\

static classname *shared##classname = nil; \

\

+ (classname *)shared##classname \

{ \

@synchronized(self) \

{ \

if (shared##classname == nil) \

{ \

shared##classname = [[self alloc] init]; \

} \

} \

\

return shared##classname; \

} \

\

+ (id)allocWithZone:(NSZone *)zone \

{ \

@synchronized(self) \

{ \

if (shared##classname == nil) \

{ \

shared##classname = [super allocWithZone:zone]; \

return shared##classname; \

} \

} \

\

return nil; \

} \

\

- (id)copyWithZone:(NSZone *)zone \

{ \

return self; \

} \

\

- (id)retain \

{ \

return self; \

} \

\

- (NSUInteger)retainCount \

{ \

return NSUIntegerMax; \

} \

\

- (void)release \

{ \

} \

\

- (id)autorelease \

{ \

return self; \

}



原创粉丝点击