iOS下单例模式实现(二)利用宏定义快速实现
2014-05-28 20:48
267 查看
在上一节里提到了用利用gcd快速实现单例模式。
一个项目里面可能有好几个类都需要实现单例模式。为了更高效的编码,可以利用c语言中宏定义来实现。
新建一个Singleton.h的头文件。
这里假设了实例的分享方法叫 shared"ClassName".
因为方法名 shared"ClassName"是连在一起的,为了让宏能够正确替换掉签名中的“ClassName”需要在前面加上 ##
当宏的定义超过一行时,在末尾加上“\”表示下一行也在宏定义范围内。
注意最后一行不需要加"\”。
下面就说明下在代码中如何调用:
这个是在类的声明里:
这个是在类的实现文件中:
类在初始化时需要做的操作可在 init 方法中实现。
一个项目里面可能有好几个类都需要实现单例模式。为了更高效的编码,可以利用c语言中宏定义来实现。
新建一个Singleton.h的头文件。
// @interface #define singleton_interface(className) \ + (className *)shared##className; // @implementation #define singleton_implementation(className) \ static className *_instance; \ + (id)allocWithZone:(NSZone *)zone \ { \ static dispatch_once_t onceToken; \ dispatch_once(&onceToken, ^{ \ _instance = [super allocWithZone:zone]; \ }); \ return _instance; \ } \ + (className *)shared##className \ { \ static dispatch_once_t onceToken; \ dispatch_once(&onceToken, ^{ \ _instance = [[self alloc] init]; \ }); \ return _instance; \ }
这里假设了实例的分享方法叫 shared"ClassName".
因为方法名 shared"ClassName"是连在一起的,为了让宏能够正确替换掉签名中的“ClassName”需要在前面加上 ##
当宏的定义超过一行时,在末尾加上“\”表示下一行也在宏定义范围内。
注意最后一行不需要加"\”。
下面就说明下在代码中如何调用:
这个是在类的声明里:
#import "Singleton.h" @interface SoundTool : NSObject // 公共的访问单例对象的方法 singleton_interface(SoundTool) @end
这个是在类的实现文件中:
类在初始化时需要做的操作可在 init 方法中实现。
@implementation SoundTool singleton_implementation(SoundTool) - (id)init { } @end
相关文章推荐
- 利用 SPL 快速实现 Observer 设计模式
- 如何利用FDD模式实现项目的精确、快速开发
- 利用IOS提供的tclsh脚本功能实现快速测试
- 利用 SPL 快速实现 Observer 设计模式
- iOS中利用委托和观察者模式实现变量回调和方法回调
- Android 利用an框架快速实现夜间模式的两种套路
- 19、iOS下单例模式实现
- [转]利用 PHP 的 SPL 快速实现 Observer 设计模式
- iOS下单例模式实现(一)(objective-c arc gcd)
- IOS 利用UIWebView和javascript的技术实现打开网页快速定位到某处(id)
- 利用 SPL 快速实现 Observer 设计模式
- 利用Foxit SDK快速实现自己的Mobile PDF阅读器-iOS 篇
- 黑马程序员—IOS加强视频—利用协议实现代理模式
- iOS 8.0 毛玻璃效果利用UIVisualEffectView快速实现
- 利用 SPL 快速实现 Observer 设计模式
- 利用 SPL 快速实现 观察者设计模式
- 利用IOS提供的tclsh脚本功能实现快速测试
- 利用XDroidMvp快速实现mvp设计模式(一)
- 利用C#实现标准的Dispose模式
- 利用C#实现标准的Dispose模式