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