`
xumingrencai
  • 浏览: 1177392 次
文章分类
社区版块
存档分类
最新评论

单例模板一则

 
阅读更多

参考我上一篇转载的博文,我对单例模板做出了一些修改,用起来的话会变得更加方便一点:

//

// SynthesizeSingleton.h

// CocoaWithLove

//

// Created by Matt Gallagher on 20/10/08.

// Copyright 2009 Matt Gallagher. All rights reserved.

//

// Permission is given to use this source code file without charge in any

// project, commercial or otherwise, entirely at your risk, with the condition

// that any redistribution (in part or whole) of source code must retain

// this copyright and permission notice. Attribution in compiled projects is

// appreciated but not required.

//


#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \

\

static classname *instance = nil; \

\

+ (classname *)getInstance \

{ \

@synchronized(self) \

{ \

if (instance == nil) \

{ \

instance = [[self alloc] init]; \

} \

} \

\

return instance; \

} \

\

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

{ \

@synchronized(self) \

{ \

if (instance == nil) \

{ \

instance = [super allocWithZone:zone]; \

return instance; \

} \

} \

\

return nil; \

} \

\

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

{ \

return self; \

} \

\

- (id)retain \

{ \

return self; \

} \

\

- (NSUInteger)retainCount \

{ \

return NSUIntegerMax; \

} \

\

- (void)release \

{ \

} \

\

- (id)autorelease \

{ \

return self; \

}

有了上面的宏模板,就再也不用机械化的多次复制粘贴以下代码了:

/**

*单例~

*/

+(AudioManager*) getInstance {

staticAudioManager*instance;

@synchronized(self) {

if(!instance) {

instance = [[selfalloc]init];

}

}

returninstance;

}

其实本质来说,还是粘贴复制,不过现在只要复制粘贴一句了

SYNTHESIZE_SINGLETON_FOR_CLASS(AudioManager)

分享到:
评论

相关推荐

    Stats:一个简单的统计计数器,实现为单例

    一个实现为单例的简单统计计数器。 概述 统计计数器在实时环境中用于映射行为以及对项目进行计数很有用。 它应该允许从系统中的任何位置添加或更新任何计数器。 这是一个实现为单例的简单统计计数器。 计数类型为...

    掌握Spring设计模式:Java工程师必备指南

    单例模式保证了Bean实例的唯一性,而适配器模式和装饰器模式则提高了代码的可扩展性和可重用性。代理模式和观察者模式在Spring AOP和事件驱动模型中得到了广泛应用,提供了强大的切面和事件处理能力。策略模式和模板...

    设计模式

    设计模式 ...通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式 模版方法模式(模板模式) 结构 抽象类/抽象方法 一个模版方法 多个基本方法 抽象方法(抽象类声明,具体子

    C#23种设计模式_示例源代码及PDF

    单例模式: 而且自行实例化并向整个系统提供这个实 单例模式 单例模式确保某一个类只有一个实例, 例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 结构型模式 6、ADAPTER —在朋友聚会上碰到...

    API设计教程

    有些API用起来很顺手,而有些则用起来让人摸不着头脑,更有些让人直接弃用。编写优质的API非常困难。大多数人的经验都源于不断犯错或借鉴别人的经验,而本书试图打破这种局面,提炼出耐用且不会过时的API设计策略。...

    java设计模式

    27.1 四则运算你会吗 27.2 解释器模式的定义 27.3 解释器模式的应用 27.3.1 解释器模式的优点 27.3.2 解释器模式的缺点 27.3.3 解释器模式使用的场景 27.3.4 解释器模式的注意事项 27.4 最佳实践 第28章 享元模式 ...

    【05-面向对象(下)】

    •抽象类代表了一种未完成的类设计,它体现的是一种模板。 •抽象类与模板模式。 接口的概念 •接口定义的是多个类共同的行为规范,这些行为是与外部交流的通道,这就意味着接口里通常是定义一组公用的 ...

    研磨设计模式-part2

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式(完整带书签).part2.pdf

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式.part3(共4个)

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式.part2(共4个)

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式.part4(共4个)

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式.part1(共4个)

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式-part4

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式-part3

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    二十三种设计模式【PDF版】

    设计模式之 Template(模板方法) 实际上向你介绍了为什么要使用 Java 抽象类,该模式原理简单,使用很普遍. 设计模式之 Strategy(策略) 不同算法各自封装,用户端可随意挑选需要的算法. 设计模式之 Chain of ...

    研磨设计模式(完整带书签).part1.pdf

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    java设计模式选择题复习题.doc

    对应 上面的类图,这里人对应于ConcreteComponent,而漂亮衣服则对应于ConcreteDecorato r; 设计模式如何分类,每一个类别都有什么特征? 设计模式分为3类,分别是:创建型模式、行为型模式、结构型模式。 创建型...

    超级有影响力霸气的Java面试题大全文档

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception有什么区别?  error 表示恢复...

Global site tag (gtag.js) - Google Analytics