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方法,以进行合适的内存管理。

我是小强,请多多指教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值