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

    我是小强,请多多指教。

  • 相关阅读:
    2019牛客暑期多校赛(第四场)
    单调栈求左右第一个比该数大(小)的位置
    带修莫队板子
    普通莫队算法
    2019牛客暑期多校赛(第三场)B-求01串中的最长01数量相等的子串和子序列
    2019牛客暑假多校赛(第二场) F和H(单调栈)
    网络文件系统nfs
    rsync详解
    逻辑卷LVM
    crontab定时任务
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3206566.html
Copyright © 2011-2022 走看看