您的位置:首页 > 移动开发 > Objective-C

Objective-C的单例模式(singleton)

2012-03-28 12:47 369 查看
如果你准备写一个类,希望保证只有一个实例存在,同时可以得到这个特定实例提供服务的入口,那么可以使用单态设计模式。

单态模式在Java、C++中很常用,在Cocoa里,也可以实现。

但是,

Objective-C的单例模式绝对和你所想象不一样,他的写法和你所见过的所有语言的写法都不一样。

官方建议

由于自己设计单态模式存在一定风险,主要是考虑到可能在多线程情况下会出现的问题,因此苹果官方建议使用以下方式来实现单态模式:

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: