创建一个单件实例

转载 2012年03月29日 16:48:08
Foundation和Application Kit框架中的一些类只允许创建单件对象,即这些类在当前进程中的唯一实例。举例来说,NSFileManagerNSWorkspace类在使用时都是基于进程进行单件对象的实例化。当您向这些类请求实例的时候,它们会向您传递单一实例的一个引用,如果该实例还不存在,则首先进行实例的分配和初始化。

单件对象充当控制中心的角色,负责指引或协调类的各种服务。如果您的类在概念上只有一个实例(比如NSWorkspace),就应该产生一个单件实例,而不是多个实例;如果将来某一天可能有多个实例,您可以使用单件实例机制,而不是工厂方法或函数。

创建单件实例时,您需要在代码中执行下面的工作:

  • 声明一个单件对象的静态实例,并初始化为nil

  • 在该类的类工厂方法(名称类似于“sharedInstance”或“sharedManager”)中生成该类的一个实例,但仅当静态实例为nil的时候。

  • 重载allocWithZone:方法,确保当用户试图直接(而不是通过类工厂方法)分配或初始化类的实例时,不会分配出另一个对象。

  • 实现基本协议方法:copyWithZone:releaseretainretainCount、和autorelease ,以保证单件的状态。

列表2-15 显示如何实现一个单件:

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;

}

当您需要一个单件实例(由类工厂方法来创建和控制),又需要通过分配和初始化创建其它实例时,就可能出现问题。在这种情况下,您不必重载allocWithZone: 及其后的其它方法,如列表2-15所示。

点击打开链接


相关文章推荐

单件模式实例

  • 2008年03月25日 13:57
  • 25KB
  • 下载

单件模式 实例 模式 很好的例子

  • 2010年01月22日 20:28
  • 907B
  • 下载

C#中利用泛型实现实例单件化

C#中利用泛型实现实例单件化 [ 2007-8-17 13:15:00 | By: 陈晴阳 ]   2 推荐 ...

18.指挥官只有一个——单件模式

随着游戏开发的进展,有人建议添加一个新的玩法——保护指挥官;游戏剧情是这样的,在游戏中有一位重要人物,玩家必须保护他,如果他的被干掉了,也就意味着Game Over。 创建新的游戏单位,这项工作当然...
  • chydev
  • chydev
  • 2012年07月18日 10:43
  • 256

Singleton 单件(创建型模式)教程

  • 2014年05月21日 11:12
  • 8.2MB
  • 下载

Singleton(单件)- 对象创建型模式

Singleton模式 一、简介: 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。[GOF] 优点:1.一个类仅有一个实例,并且客户可以从一个众所周知的访问点访问它。      ...

Singleton 单件(创建型模式)

  • 2008年04月16日 15:56
  • 8.19MB
  • 下载

1.5 Singleton(单件) -- 对象创建型模式

神州上下五千年,为了抵御匈奴的入侵,无数的人民投入到兴建万里长城浩瀚的工程中。也正因为有这些劳动人民辛勤的付出,才有了今天世界八大奇迹之一-----独一无二的万里长城。在软件开发中,同样存在这种唯一的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建一个单件实例
举报原因:
原因补充:

(最多只允许输入30个字)