zoukankan      html  css  js  c++  java
  • [置顶] 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方法,以进行合适的内存管理。

    我是小强,请多多指教。

  • 相关阅读:
    log4j动态添加appender
    【翻译】java里编写基准测试的一些经验
    java线程池:获取运行线程数并控制线程启动速度
    maven里的mirror和repository: 配置多repository
    使用maven shade plugin 打可执行Jar包
    activemq plugin开发指南及示例
    通过加入classpath的形式实现命令行运行java程序时引入第三方jar包
    java异常、异常处理机制
    内部类
    接口
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3206566.html
Copyright © 2011-2022 走看看