如果你准备写一个类,希望保证只有一个实例存在,同时可以得到这个特定实例提供服务的入口,那么可以使用单态设计模式。单态模式在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
-
{
-
顶一下(13)76.5%踩一下(4)23.5%------分隔线----------------------------
- 最新评论 查看所有评论
-
- 发表评论 查看所有评论
-
- 推荐内容
-
- 为什么我认为每个程序员都应该用
原文地址 http://tiny4.org/blog/2010/02/why-programmers-should-use-mac-os-x/ 查...
- Cocoa教学:Windows OOP与Cocoa MVC之对比
封装不封装,这是个问题。 今天我在看Cocoa开发者邮件列表的时...
- Objective-C中的一些特殊的数据类型
在Objective-C中,有一些我们之前并不熟悉但是经常见到的数据类...
- 谈谈XCode代码自动完成Code Sense功能
目前关于XCode代码自动完成方面的文章很少,在这里谈一下自己...
- 歪批:XCode之外的选择?苹果非主流
从火星来的地球人都知道,苹果提供了一个非常漂亮的免费开发...
- 一点基础的东西:Objective-C的类型和
Objective-C中有几种数据类型和C不太一样。特此记录。 - id 是一个...
- 为什么我认为每个程序员都应该用