OC中的单例

来源:互联网 发布:黑莓淘宝哪家店好 编辑:程序博客网 时间:2024/05/22 06:29
原文地址: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不会有大的执行时间开销,而且这为以后开发 打下了好的基础。
第七行:
    检查是否该类对象实例已经初始化。我们是否需要生成该类的实例。
十四行:
    返回创建的/已存在的对象实例。
原创粉丝点击