oc单例的快速创建

oc工程中 都会用到单例模式进行应用中数据的存储,然而在创建单例的过程会比较的繁琐 需要区分MRC 与ARC 给大家分享一个快速的方法 直接上代码 

#if __has_feature(objc_arc)

#define     MYOBJECT_SINGLETON_FOR_CLASS(classname) \

\

static classname *shared##classname = nil; \

\

+ (classname *)shared##classname \

{ \

@synchronized(self) \

{ \

if (shared##classname == nil) \

{ \

shared##classname = [[self alloc] init]; \

} \

} \

\

return shared##classname; \

} \

\

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

{ \

@synchronized(self) \

{ \

if (shared##classname == nil) \

{ \

shared##classname = [super allocWithZone:zone]; \

return shared##classname; \

} \

} \

\

return nil; \

} \

\

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

{ \

return self; \

} \

#else

#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \

\

static classname *shared##classname = nil; \

\

+ (classname *)shared##classname \

{ \

@synchronized(self) \

{ \

if (shared##classname == nil) \

{ \

shared##classname = [[self alloc] init]; \

} \

} \

\

return shared##classname; \

} \

\

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

{ \

@synchronized(self) \

{ \

if (shared##classname == nil) \

{ \

shared##classname = [super allocWithZone:zone]; \

return shared##classname; \

} \

} \

\

return nil; \

} \

\

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

{ \

return self; \

} \

\

- (id)retain \

{ \

return self; \

} \

\

- (NSUInteger)retainCount \

{ \

return NSUIntegerMax; \

} \

\

- (oneway void)release \

{ \

} \

\

- (id)autorelease \

{ \

return self; \

}

#endif

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式 什么是单例模式? 单例模式想一个大独裁者,他规定在他的国度里面,所有数据的访问和请求都得经过他,甚至你要...
    GitHubPorter阅读 1,191评论 0 4
  • 什么是单例模式? >是开发设计模式(共23种)中的1种 >它可以保证在程序运行过程,一个类只有一个实例(一个对象)...
    泥孩儿0107阅读 263评论 0 0
  • 在开发中经常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死...
    不要重名就好阅读 557评论 0 0
  • 我对你的相思 岂是一纸文字 能够书写撒尽 我日出听风 我日落听雨 听你的脚步 从风中飘来 从雨中滴落 然后走近 走...
    寂寞空间阅读 88评论 0 0
  • 我是一家咖啡馆的老板娘,当然,这家咖啡馆并没有老板。 我毕业于我咖啡馆附近的一所大学,咖啡馆和大学位于一座小岛,三...
    刃沐阅读 172评论 0 1