利用宏实现单例(在宏中写实现方法)
2015-04-25 23:13
127 查看
声明和实现:
[objc] view
plaincopyprint?
#undef AS_SINGLETON
#define AS_SINGLETON( __class ) \
- (__class *)sharedInstance; \
+ (__class *)sharedInstance;
#undef DEF_SINGLETON
#define DEF_SINGLETON( __class ) \
- (__class *)sharedInstance \
{ \
return [__class sharedInstance]; \
} \
+ (__class *)sharedInstance \
{ \
static dispatch_once_t once; \
static __class * __singleton__; \
dispatch_once( &once, ^{ __singleton__ = [[[self class] alloc] init]; } ); \
return __singleton__; \
}
#undef DEF_SINGLETON_AUTOLOAD
#define DEF_SINGLETON_AUTOLOAD( __class ) \
- (__class *)sharedInstance \
{ \
return [__class sharedInstance]; \
} \
+ (__class *)sharedInstance \
{ \
static dispatch_once_t once; \
static __class * __singleton__; \
dispatch_once( &once, ^{ __singleton__ = [[[self class] alloc] init]; } ); \
return __singleton__; \
} \
+ (void)load \
{ \
[self sharedInstance]; \
}
使用:
在XX.h 头文件中做如下声明:
[objc] view
plaincopyprint?
AS_SINGLETON(MainVC)
在XX.m 文件中做如下实现:
[objc] view
plaincopyprint?
DEF_SINGLETON(MainVC)
这里演示的是单个线程的代码,如果是多线程的话,可以使用 @synchronizer() 指令防止多个线程同时执行这段代码。
[objc] view
plaincopyprint?
#undef AS_SINGLETON
#define AS_SINGLETON( __class ) \
- (__class *)sharedInstance; \
+ (__class *)sharedInstance;
#undef DEF_SINGLETON
#define DEF_SINGLETON( __class ) \
- (__class *)sharedInstance \
{ \
return [__class sharedInstance]; \
} \
+ (__class *)sharedInstance \
{ \
static dispatch_once_t once; \
static __class * __singleton__; \
dispatch_once( &once, ^{ __singleton__ = [[[self class] alloc] init]; } ); \
return __singleton__; \
}
#undef DEF_SINGLETON_AUTOLOAD
#define DEF_SINGLETON_AUTOLOAD( __class ) \
- (__class *)sharedInstance \
{ \
return [__class sharedInstance]; \
} \
+ (__class *)sharedInstance \
{ \
static dispatch_once_t once; \
static __class * __singleton__; \
dispatch_once( &once, ^{ __singleton__ = [[[self class] alloc] init]; } ); \
return __singleton__; \
} \
+ (void)load \
{ \
[self sharedInstance]; \
}
使用:
在XX.h 头文件中做如下声明:
[objc] view
plaincopyprint?
AS_SINGLETON(MainVC)
在XX.m 文件中做如下实现:
[objc] view
plaincopyprint?
DEF_SINGLETON(MainVC)
这里演示的是单个线程的代码,如果是多线程的话,可以使用 @synchronizer() 指令防止多个线程同时执行这段代码。
相关文章推荐
- asp中利用数组实现数据库记录的批量录入方法
- 利用ASP实现事务处理的方法(摘)
- 三个利用Java实现zip压缩/解压缩方法
- 三个利用Java实现zip压缩/解压缩方法
- 利用ASP实现事务处理的方法
- (原创)在ASP.Net中两种利用CSS实现多界面的方法.
- 在ASP.Net中两种利用CSS实现多界面的方法
- 在ASP.Net中两种利用CSS实现多界面的方法.
- 在ASP.Net中两种利用CSS实现多界面的方法. (转)
- 利用反射实现工厂方法
- 在ASP.Net中两种利用CSS实现多界面的方法(转)
- 在ASP.Net中两种利用CSS实现多界面的方法
- asp中利用数组实现数据库记录的批量录入方法
- 蛙蛙请教:如何利用委托实现多个方法同时调用.
- 在ASP.Net中两种利用CSS实现多界面的方法. (转)
- 利用存储过程实现交叉表格式数据查询的一种通用方法
- [转]在ASP.Net中两种利用CSS实现多界面的方法
- 在ASP.Net中两种利用CSS实现多界面的方法
- 利用图形页实现动画的方法
- 在ASP.Net中两种利用CSS实现多界面的方法