Wer einen einfachen Weg sucht, ein Singleton zu erstellen,
dem sei nachfolgendes Makro empfohlen, das Grand Central Dispatch (GCD)
nutzt und ARC-ready ist. Ein Singleton ist ein Software-Pattern, das sicherstellt, dass ein Objekt genau einmal existiert.
Im Normalfall ist ein Singleton global verfügbar.
1
2
3
4
5
6
7
8
9
10
11
12
|
#ifndef SINGLETON_GCD
#define SINGLETON_GCD(classname) \
\
+ (classname *)shared##classname { \
static dispatch_once_t pred; \
__strong static classname *shared##classname = nil; \
dispatch_once( &pred, ^{ \
shared##classname = [[self alloc] init]; }); \
return shared##classname; \
}
#endif
|
Minimalbeispiel für die Verwendung des Singleton Makros:
1
2
3
4
5
6
7
|
@interface MyClass : NSObject
+ (MyClass *)sharedMyClass;
- (void)testMethod;
@end
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#import "MyClass.h"
#import "GCDSingleton.h"
@implementation MyClass
- (void)testMethod {
//do something
}
SINGLETON_GCD(MyClass);
@end
|
1
2
3
4
5
6
7
8
9
10
|
#import "AnyClass.h"
#import "MyClass.h"
@implementation AnyClass
- (void)test {
[[MyClass sharedMyClass] testMethod];
}
@end
|