# #: Connection Strings and Parameters
#define SINGLETON_H (name) + (instancetype) shared# #name;
#if __has_feature (OBJ_ARC)//arc
#define SINGLETON_M (name) \
Static ID _instance; \
+ (ID) allocwithzone: (struct _nszone *) zone \
{ \
Static dispatch_once_t Oncetoken; \
Dispatch_once (&oncetoken, ^{\
_instance = [Super Allocwithzone:zone]; \
}); \
return _instance; \
} \
\
+ (instancetype) shared# #name \
{ \
Static dispatch_once_t Oncetoken; \
Dispatch_once (&oncetoken, ^{\
_instance = [[Self alloc] init]; \
}); \
return _instance; \
} \
\
+ (ID) copywithzone: (struct _nszone *) zone \
{ \
return _instance; \
}
#else//Non-arc
#define SINGLETON_M (name) \
Static ID _instance; \
+ (ID) allocwithzone: (struct _nszone *) zone \
{ \
Static dispatch_once_t Oncetoken; \
Dispatch_once (&oncetoken, ^{\
_instance = [Super Allocwithzone:zone]; \
}); \
return _instance; \
} \
\
+ (instancetype) shared# #name \
{ \
Static dispatch_once_t Oncetoken; \
Dispatch_once (&oncetoken, ^{\
_instance = [[Self alloc] init]; \
}); \
return _instance; \
} \
\
-(oneway void) release \
{ \
\
} \
\
-(ID) autorelease \
{ \
return _instance; \
} \
\
-(ID) retain \
{ \
return _instance; \
} \
\
-(Nsuinteger) retaincount \
{ \
return 1; \
} \
\
+ (ID) copywithzone: (struct _nszone *) zone \
{ \
return _instance; \
}
#endif
Single Case Macro ARC MRC