Objective C 中实现单例模式




首先,提前祝大家中秋快乐!公司今天下午能提前下班,闲着无事,上网找点单例模式的文档,但是并不是太多,就搜了篇英文的,感觉不错,就花了一个多小时把它翻译了一下。有需要的同学可以看一看。 :~)    wangjun     2010-9-21

因为翻译是临时起意,准备不足,所以可能翻译的并不好,大家见谅。

原文地址:http://numbergrinder.com/node/29

Objective-C  设计模式:Singleton Pattern

    当迁移到一种新的编程语言时,需要面临的问题之一就是怎样设计对应于该语言的设计模式。大部分情况语言为设计模式提供了易于实现的内建支持,或者干脆拥有直接实现了这种设计模式。

    举例来说,在Python中,实现Command Dispatch模式和Singleton模式几乎时完全不必要的,你只需要在创建的模块(module)顶部插入"""This module implements the singleton pattern"""就万事大吉啦!实质上这就是一个Singleton。     省事吧:~)

    但是换成Objective-c就不一样了:~(。下面我(指作者:David)就开始讲解如何在Objective-c中实现在我日常iphone开发中需要用到的设计模式。

    在这些设计模式中,我发现自己最需要用到的是Singleton模式。在程序中,我需要一系列的对象,他们每一个内部都包含有一组变量和功能,是静态的,而且整个程序都只需要拥有一个该类的对象。

    例如:

    1.控制程序执行的命令器

    2.管理数据库

    3.音效控制

    4.文件处理

    还有很多很多…

简单来讲,我的众多游戏引擎之间需要去共享一系列的变量和功能,但是我并不想实例化多个对象。

    在做了一些搜索后,我创建了下面的singleton模式:

  1.    @implementation Singleton

    2.     

    3.    + (Singleton *)instance  {

    4.            static Singleton *instance;

    5.           

    6.            @synchronized(self) {

    7.                    if(!instance) {

    8.                            instance = [[Singleton alloc] init];

    9.                           

    10.                           

    11.                    }

    12.            }

    13.           

    14.            return instance;

    15.    }

    16.     

    17.    @end

  这个单例可以用[Singleton instance]得到.

  一次查阅下面的步骤:

第四行:

    声明了静态变量,如果你有JAVA编程背景的话,这里或许会让你有点疑惑,在C(C++ 和 Objective-C)中,一个静态局部变量作用域存在于函数内,但是生命周期是整个程序,在下一次该函数调用时仍可使用。(和java中的类静态变量被该类各个实例变量共有的特点相似)。

    译者注:关于静态变量有疑问的同学请猛击这里:http://baike.baidu.com/view/675642.htm

第六行:

    我们想使用线程保护,这样同时的两个[Singleton instance]调用不会产生两个独立的对象实例。即使在一个单线程程序中,这种Synchronization不会有大的执行时间开销,而且这为以后开发打下了好的基础。

第七行:

    检查是否该类对象实例已经初始化。我们是否需要生成该类的实例。

十四行:

    返回创建的/已存在的对象实例。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值