One-sentence OC Singleton mode and one-sentence OC Mode
Create a new header file and define the following macro:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
// Implementation of. h file #define SingletonH(methodName) + (instancetype)shared##methodName; // Implementation of the. m file # If _ has_feature (objc_arc) // It is ARC #define SingletonM(methodName) \ static id _instace = nil ; \ + ( id )allocWithZone:( struct _NSZone *)zone \ { \ if (_instace == nil ) { \ static dispatch_once_t onceToken; \ dispatch_once(&onceToken, ^{ \ _instace = [ super allocWithZone:zone]; \ }); \ } \ return _instace; \ } \ \ - ( id )init \ { \ static dispatch_once_t onceToken; \ dispatch_once(&onceToken, ^{ \ _instace = [ super init]; \ }); \ return _instace; \ } \ \ + (instancetype)shared##methodName \ { \ return [[ self alloc] init]; \ } \ + ( id )copyWithZone:( struct _NSZone *)zone \ { \ return _instace; \ } \ \ + ( id )mutableCopyWithZone:( struct _NSZone *)zone \ { \ return _instace; \ } # Else // not ARC #define SingletonM(methodName) \ static id _instace = nil ; \ + ( id )allocWithZone:( struct _NSZone *)zone \ { \ if (_instace == nil ) { \ static dispatch_once_t onceToken; \ dispatch_once(&onceToken, ^{ \ _instace = [ super allocWithZone:zone]; \ }); \ } \ return _instace; \ } \ \ - ( id )init \ { \ static dispatch_once_t onceToken; \ dispatch_once(&onceToken, ^{ \ _instace = [ super init]; \ }); \ return _instace; \ } \ \ + (instancetype)shared##methodName \ { \ return [[ self alloc] init]; \ } \ \ - (oneway void )release \ { \ \ } \ \ - ( id )retain \ { \ return self ; \ } \ \ - ( NSUInteger )retainCount \ { \ return 1; \ } \ + ( id )copyWithZone:( struct _NSZone *)zone \ { \ return _instace; \ } \ \ + ( id )mutableCopyWithZone:( struct _NSZone *)zone \ { \ return _instace; \ } #endif |
Then
. H file write SingletonH (MyMethodName)
. M file write SingletonM (MyMethodName)
Done!