Return to Snippet

Revision: 39715
at January 20, 2011 02:27 by andrewroycarter


Initial Code
//MyManager.h

#import <foundation/Foundation.h>
 
@interface MyManager : NSObject {
    NSString *someProperty;
}
 
@property (nonatomic, retain) NSString *someProperty;
 
+ (id)sharedManager;
 
@end

//MyManager.m

#import "MyManager.h"
 
static MyManager *sharedMyManager = nil;
 
@implementation MyManager
 
@synthesize someProperty;
 
#pragma mark Singleton Methods
+ (id)sharedManager {
    @synchronized(self) {
        if(sharedMyManager == nil)
            sharedMyManager = [[super allocWithZone:NULL] init];
    }
    return sharedMyManager;
}
+ (id)allocWithZone:(NSZone *)zone {
    return [[self sharedManager] retain];
}
- (id)copyWithZone:(NSZone *)zone {
    return self;
}
- (id)retain {
    return self;
}
- (unsigned)retainCount {
    return UINT_MAX; //denotes an object that cannot be released
}
- (void)release {
    // never release
}
- (id)autorelease {
    return self;
}
- (id)init {
    if (self = [super init]) {
        someProperty = [[NSString alloc] initWithString:@"Default Property Value"];
    }
    return self;
}
- (void)dealloc {
    // Should never be called, but just here for clarity really.
    [someProperty release];
    [super dealloc];
}
 
@end

Initial URL


Initial Description
Credit: http://iphone.galloway.me.uk/iphone-sdktutorials/singleton-classes/

Initial Title
Singleton Skeleton

Initial Tags


Initial Language
Objective C