Objective-C 单实例

#import <Foundation/Foundation.h>

@interface Singleton : NSObject

+ (Singleton*)sharedManager;


@end
#import "Singleton.h"

static Singleton* sharedGizmoManager = nil;//static 静态实例是关键

@implementation Singleton


+ (Singleton*)sharedManager
{
    @synchronized(self){
        if(sharedGizmoManager == nil) {
            [[self alloc] init];// assignment not done here
        }
    }
    return sharedGizmoManager;
}
//唯一一次alloc单例,之后均返回nil
+ (id)allocWithZone:(NSZone*)zone
{
    @synchronized(self){
        if(sharedGizmoManager == nil) {
            sharedGizmoManager = [super allocWithZone:zone];
            return sharedGizmoManager;  // assignment and return on first allocation
        }
    }
    return nil; //on subsequent allocation attempts return nil
}
//copy返回单例本身
- (id)copyWithZone:(NSZone*)zone
{
    return self;
}
//retain返回单例本身
- (id)retain
{
    return self;
}
//引用计数总是为1
- (unsigned)retainCount
{
    return UINT_MAX;  //denotes an object that cannot be released
}
//release不做任何处理
- (oneway void)release
{
    
}
//autorelease返回单例本身
- (id)autorelease
{
    return self;
}

@end
posted @ 2012-11-19 21:47  天已界  阅读(241)  评论(0编辑  收藏  举报