您的位置:首页 > 其它

利用宏实现单例(在宏中写实现方法)

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() 指令防止多个线程同时执行这段代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: