OC單例模式


原文地址: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模式:

@implementation Singleton
 
+ (Singleton *)instance  {
static Singleton *instance;
 
@synchronized(self) {
if(!instance) {
instance = [[Singleton alloc] init];
 
}
}
 
return instance;
}
 
@end

  


  這個單例 可以用[Singleton instance]得到.
  一次查閱下面的步驟:
第四行:
    聲明了靜態變量,如果你有JAVA編程背景的話,這里或許會讓你有點疑惑,在C(C++ 和 Objective-C)中,一個靜態局部變量作用域存在於函數內,但是生命周期是整個程序,在下一次該函數調用時仍可使用 。(和java中的類靜態變量被該類各個實例變量共有的特點相似)。
    譯者注:關於靜態變量有疑問的同學請猛擊這里:http://baike.baidu.com/view/675642.htm 
第六行:
    我們想使用線程保護,這樣同時的兩個[Singleton instance]調用不會產生兩個獨立的對象實例。即使在一個單線程程序中,這種Synchronization不會有大的執行時間開銷,而且這為以后開發 打下了好的基礎。
第七行:
    檢查是否該類對象實例已經初始化。我們是否需要生成該類的實例。
十四行:
    返回創建的/已存在的對象實例。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM