69 lines
1.2 KiB
C
69 lines
1.2 KiB
C
//
|
|
// SynthesizeSingleton.h
|
|
// CocoaWithLove
|
|
//
|
|
// Created by Matt Gallagher on 20/10/08.
|
|
// Copyright 2009 Matt Gallagher. All rights reserved.
|
|
//
|
|
// Permission is given to use this source code file without charge in any
|
|
// project, commercial or otherwise, entirely at your risk, with the condition
|
|
// that any redistribution (in part or whole) of source code must retain
|
|
// this copyright and permission notice. Attribution in compiled projects is
|
|
// appreciated but not required.
|
|
//
|
|
|
|
#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \
|
|
\
|
|
static classname *shared##classname = nil; \
|
|
\
|
|
+ (classname *)shared##classname \
|
|
{ \
|
|
@synchronized(self) \
|
|
{ \
|
|
if (shared##classname == nil) \
|
|
{ \
|
|
shared##classname = [[self alloc] init]; \
|
|
} \
|
|
} \
|
|
\
|
|
return shared##classname; \
|
|
} \
|
|
\
|
|
+ (id)allocWithZone:(NSZone *)zone \
|
|
{ \
|
|
@synchronized(self) \
|
|
{ \
|
|
if (shared##classname == nil) \
|
|
{ \
|
|
shared##classname = [super allocWithZone:zone]; \
|
|
return shared##classname; \
|
|
} \
|
|
} \
|
|
\
|
|
return nil; \
|
|
} \
|
|
\
|
|
- (id)copyWithZone:(NSZone *)zone \
|
|
{ \
|
|
return self; \
|
|
} \
|
|
\
|
|
- (id)retain \
|
|
{ \
|
|
return self; \
|
|
} \
|
|
\
|
|
- (NSUInteger)retainCount \
|
|
{ \
|
|
return NSUIntegerMax; \
|
|
} \
|
|
\
|
|
- (void)release \
|
|
{ \
|
|
} \
|
|
\
|
|
- (id)autorelease \
|
|
{ \
|
|
return self; \
|
|
}
|