Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // GCDSingleton.h
- //
- // Macros to simplify creating of a sharedInstance for a class using GCD (ARC compliant)
- //
- // Use one of the following methods to create a sharedInstance
- //
- //
- // METHOD #1: use this if you want the sharedInstance method to be 'sharedClassName'
- //
- // @implementation MySharedThing
- //
- // DEFINE_SHARED_INSTANCE_FOR_CLASS(MySharedThing)
- //
- #define DEFINE_SHARED_INSTANCE_FOR_CLASS(className) \
- + (id)shared##className \
- { \
- static dispatch_once_t pred = 0; \
- __strong static id _sharedObject = nil; \
- dispatch_once(&pred, ^{ \
- _sharedObject = ^{return [[self alloc] init];}(); \
- }); \
- return _sharedObject; \
- } \
- //
- // METHOD #2: use this if you want to name the 'sharedXXX' method yourself
- //
- // @implementation MySharedThing
- //
- // + (id)sharedInstance
- // {
- // DEFINE_SHARED_INSTANCE_USING_BLOCK(^{
- // return [[self alloc] init];
- // });
- // }
- //
- // @end
- //
- #define DEFINE_SHARED_INSTANCE_USING_BLOCK(block) \
- static dispatch_once_t pred = 0; \
- __strong static id _sharedObject = nil; \
- dispatch_once(&pred, ^{ \
- _sharedObject = block(); \
- }); \
- return _sharedObject; \
Add Comment
Please, Sign In to add comment