[置顶] Objective-C编程之道iOS设计模式单例解析(2)

上一篇文章,提到了单例子类化的问题。正好最近,我在Stack Overflow看见一位国外高人,也谈及了单例子类化的一些内容。思考之后,总结了一些内容。其大意是利用NSDirectory存储不同子类的单例实例,这样可以很好的解决单例子类化的问题。OK,talk is cheap,show me the code! 多说无益,以下是我自己写的一段示例代码

#import "MySingleton.h"

@implementation MySingleton
static NSMutableDictionary * singletonDictionary=nil;
+(MySingleton *) sharedInstance{
    if(singletonDictionary==nil){
        singletonDictionary=[NSMutableDictionary dictionaryWithObject:[NSAllocateObject(self, 0, NULL) init] forKey:[[self class]description]];
        
    }
    else{
        if([singletonDictionary objectForKey:[[self class] description]]==nil){
            [singletonDictionary setObject:[NSAllocateObject(self, 0, NULL) init] forKey:[[self class] description]];
        }
        
    }
    
    return [singletonDictionary objectForKey:[[self class] description]];
    
}
-(void) release{
    
}
-(id) retain{
    return self;
}
-(id)autorelease{
    return self;
}
-(NSUInteger)retainCount{
    return NSUIntegerMax;
}
+(id)allocWithZone:(NSZone *)zone{
    
    return [[self sharedInstance]retain];
}
@end


拥有这样的单例模式的父类,子类只需直接继承父类,即可轻松实现属于自己的类单例模式,而且同时支持很多不同子类和父类的单例并存。当然,子类也可以重新定义自己的retain,release,autorelease方法,以进行合适的内存管理。

我是小强,请多多指教。

原文地址:https://www.cnblogs.com/jiangu66/p/3206566.html