iOS 单例宏

2020-01-14  本文已影响0人  万事皆允_iOS

#if __has_feature(objc_arc)

#define SYNTHESIZE_SINGLETON_FOR_CLASS_HEADER(classname) \

\

+ (classname *)shared##classname;

#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \

\

static classname *shared##classname = nil; \

\

+ (classname *)shared##classname \

{ \

    static dispatch_once_t pred; \

    dispatch_once(&pred, ^{ shared##classname = [[classname alloc] init]; }); \

    return shared##classname; \

}

#else

#define SYNTHESIZE_SINGLETON_FOR_CLASS_HEADER(classname) \

\

+ (classname *)shared##classname;

#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \

\

static classname *shared##classname = nil; \

\

+ (classname *)shared##classname \

{ \

    static dispatch_once_t pred; \

    dispatch_once(&pred, ^{ shared##classname = [[classname alloc] init]; }); \

    return shared##classname; \

} \

\

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

{ \

    return self; \

} \

\

- (id)retain \

{ \

    return self; \

} \

\

- (NSUInteger)retainCount \

{ \

    return NSUIntegerMax; \

} \

\

- (oneway void)release \

{ \

} \

\

- (id)autorelease \

{ \

    return self; \

}

#endif

上一篇下一篇

猜你喜欢

热点阅读