- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如果你准备写一个类,希望保证只有一个实例存在,同时可以得到这个特定实例提供服务的入口,那么可以使用单态设计模式。
单态模式在Java、C++中很常用,在Cocoa里,也可以实现。
但是,
Objective-C的单例模式绝对和你所想象不一样,他的写法和你所见过的所有语言的写法都不一样。
?
官方建议
?
由于自己设计单态模式存在一定风险,主要是考虑到可能在多线程情况下会出现的问题,因此苹果官方建议使用以下方式来实现单态模式:
static MyGizmoClass *sharedGizmoManager = nil;
+ (MyGizmoClass*)sharedManager
{
??? @synchronized(self) {
??????? if (sharedGizmoManager == nil) {
??????????? [[self alloc] init]; // assignment not done here
??????? }
??? }
??? return sharedGizmoManager;
}
+ (id)allocWithZone:(NSZone *)zone
{
??? @synchronized(self) {
??????? if (sharedGizmoManager == nil) {
??????????? sharedGizmoManager = [super allocWithZone:zone];
??????????? return sharedGizmoManager;? // assignment and return on first allocation
??????? }
??? }
??? return nil; //on subsequent allocation attempts return nil
}
- (id)copyWithZone:(NSZone *)zone
{
??? return self;
}
- (id)retain
{
??? return self;
}
- (unsigned)retainCount
{
??? return UINT_MAX;? //denotes an object that cannot be released
}
- (void)release
{
??? //do nothing
}
- (id)autorelease
{
??? return self;
}
?
开源模板(见附件下载)
程序员都是偷懒的,现在流行使用一个宏定义来搞定这许多的事,而且考虑的更加周全。
单例包含以下接口
+ (MyClass*) sharedInstance;
+ (void) purgeSharedInstance;
?
调用sharedInstance会创建并返回单例
调用purgeSharedInstance会销毁单例
手动调用alloc也可以保证是单例,你可以这样调用
[[MyClass alloc] initWithParam:firstParam secondParam:secondParam];
只是要保证在sharedInstance之前调用,因为只有一次创建机会。
下面是使用宏的写法“
MyClass.h:
========================================
??? #import SynthesizeSingleton.h
??? @interface MyClass: SomeSuperclass
??? {
??????? ...
??? }
??? SYNTHESIZE_SINGLETON_FOR_CLASS_HEADER(MyClass);
??? @end
========================================
??? MyClass.m:
========================================
??? #import MyClass.h
??? @implementation MyClass
??? SYNTHESIZE_SINGLETON_FOR_CLASS(MyClass);
??? ...
??? @end
========================================
?? 定义:单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
??? 要点: 1、某
您可能关注的文档
- Kaizen改善资料.ppt
- GE燃烧系统概述.ppt
- K9000软件培训资料.ppt
- KA运作手册——简资料.ppt
- KBSGZY矿用隔爆型移动变电站(干式变压器)使用说明书资料.doc
- Kiowa基奥瓦人资料.pptx
- go for it 2016年七下英语unit5 period4课件.ppt
- Gone With The Wind随风而逝——浅论《飘》的人生态度.ppt
- GOODTU东郊商办中心--高端商业201203.ppt
- KPI绩效指标的与运用39页资料.ppt
- 2025年跨境电商物流行业发展趋势与用户需求预测报告.docx
- 2025至2030化妆笔行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030进口肉类行业项目调研及市场前景预测评估报告.docx
- 铸管管模粉生产建设项目可行性研究报告.doc
- 区域内外商直接投资对职业发展的空间重塑.docx
- 智能医疗平台2025医生资源配置效率分析报告.docx
- 2025至2030中国脱水冷冻水果行业项目调研及市场前景预测评估报告.docx
- 新能源汽车潜在用户购车需求与市场竞争研究报告2025.docx
- 制造业智能化改造投资策略与2025年投入产出效益评估报告.docx
- 2025至2030中国抗高血压药行业市场发展分析及竞争格局与投资发展报告.docx
文档评论(0)