上一篇文章,提到了单例子类化的问题。正好最近,我在Stack Overflow看见一位国外高人,也谈及了单例子类化的一些内容。思考之后,总结了一些内容。其大意是利用NSDirectory存储不同子类的单例实例,这样可以很好的解决单例子类化的问题。OK,talk is cheap,show me the code! 多说无益,以下是我自己写的一段示例代码
#import "MySingleton.h"@implementation MySingletonstatic 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方法,以进行合适的内存管理。
我是小强,请多多指教。