解析Cocoa单态 singleton设计模式是本文要介绍的内容,不多说,先来看内容,如果你准备写一个类,希望保证只有一个实例存在,同时可以得到这个特定实例提供服务的入口,那么可以使用单态设计模式。单态模式在Java、C++中很常用,在Cocoa里,也可以实现。
由于自己设计单态模式存在一定风险,主要是考虑到可能在多线程情况下会出现的问题,因此苹果官方建议使用以下方式来实现单态模式:
- static MyGizmoClass *sharedGizmoManager = nil;
- (MyGizmoClass*)sharedManager
- {
- @synchronized(self) {
- if (sharedGizmoManager == nil) {
- [[self alloc] init]; // assignment not done here
- }
- }
- return sharedGizmoManager;
- }
- (id)allocWithZone:(NSZone *)zone
- {
- @synchronized(self) {
- if (sharedGizmoManager == nil) {
- sharedGizmoManager = [super allocWithZone:zone];
- return sharedGizmoManager; // assignment and return on first allocation
- }
- }
- return nil; //on subsequent allocation attempts return nil
- }
- (id)copyWithZone:(NSZone *)zone
- {
- return self;
- }
- (id)retain
- {
- return self;
- }
- (unsigned)retainCount
- {
- return UINT_MAX; //denotes an object that cannot be released
- }
- (void)release
- {
- //do nothing
- }
- (id)autorelease
- {
- return self;
小结:解析Cocoa单态 singleton设计模式的内容介绍完了,希望本文对你有所帮助!