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; \
}
- IOS设计模式之我见-单例模式
- 设计模式之我见-------单例模式
- IOS设计模式之----单例模式
- iOS设计模式之单例模式
- iOS设计模式之单例模式
- iOS设计模式之单例模式
- iOS设计模式之单例模式
- iOS设计模式之单例模式
- iOS设计模式之单例模式
- 设计模式之我见
- 设计模式之我见
- 设计模式之我见
- 设计模式之我见
- 设计模式 之我见
- 设计模式之我见
- 一、单例模式之我见
- IOS开发之----单例设计模式
- iOS设计模式之单例
- 股评 2013-09-05 + 今后但凡要买卖,绝对需要专心致志,不能开小差!如若再犯,自罚从家跑到健身房!犯一次罚一次!立帖为证
- libzbar源码
- Exercises 4.1 E2
- open-iscsi docs
- 我的读博经历回顾与经验分享
- IOS设计模式之我见-单例模式
- packageinstaller实验静默安装与卸载的关键代码
- 习题
- 用最精炼语言介绍OpenStack网络代码演进的前世今生
- startOSW.sh: ./OSWatcher.sh: /bin/ksh: bad interpreter: Permission denied
- greenplum分区表查看所占空间大小
- SSAS(分析服务)优化手册
- mp4 文件数据分析
- 谁在用Hadoop