1 | @interface RootObject |
2 | + (instancetype)alloc; |
3 | |
4 | - (instancetype)init; |
5 | @end |
6 | |
7 | @interface BaseClass : RootObject |
8 | + (instancetype)sharedInstance; |
9 | |
10 | - (instancetype)initWithFoo:(int)foo; |
11 | @end |
12 | |
13 | static BaseClass *sharedInstance = (void *)0; |
14 | static int counter = 0; |
15 | |
16 | @implementation BaseClass |
17 | + (instancetype)sharedInstance { |
18 | if (sharedInstance) { |
19 | return sharedInstance; |
20 | } |
21 | sharedInstance = [[BaseClass alloc] initWithFoo:3]; |
22 | return sharedInstance; |
23 | } |
24 | |
25 | |
26 | - (instancetype)initWithFoo:(int)foo { |
27 | self = [super init]; |
28 | if (self) { |
29 | counter += foo; |
30 | } |
31 | return self; |
32 | } |
33 | @end |
34 | |
35 | |