iOS開發-OC篇-單例模式

來源:互聯網
上載者:User

標籤:

  

   回顧一下load和initialize方法,有幾點需要注意。

 

load方法和initialize方法分析:

 

1、load方法:

 

1> 當類被引用進程式的時候會執行這個函數

2> 一個類的load方法不用寫明[super load],父類就會收到調用,並且在子類之前。

3> Category的load也會收到調用,但順序上在主類的load調用之後。

 

2、initialize方法:

 

1> initialize的自然調用是在第一次主動使用當前類的時候

2> 和load不同,即使子類不實現initialize方法,會把父類的實現繼承過來調用一遍。注意的是在此之前,父類的方法已經被執行過一次了,同樣不需要super調用。

 

3、load和initialize有很多共同特點,下面簡單列一下:

 

1> 在不考慮開發人員主動使用的情況下,系統最多會調用一次

2> 如果父類和子類都被調用,父類的調用一定在子類之前

3> 都是為了應用運行提前建立合適的運行環境

4> 在使用時都不要過重地依賴於這兩個方法,除非真正必要

 

由於initialize的這些特點,使得其應用比load要略微廣泛一些。可用來做一些初始化工作,或者單例模式的一種實現方案

 

4、單例模式

 

1> 概念

 

單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個執行個體而且該執行個體易於外界訪問,從而方便對執行個體個數的控制並節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。

 

2> 書寫步驟

 

(1)建立類方法,返回對象執行個體.以shared  default current開頭。

(2)建立一個全域變數用來儲存對象的引用

(3)判斷對象是否存在,若不存在,建立對象

 

3> 非安全執行緒寫法

 

static UserHelper * helper = nil;

+ (UserHelper *)sharedUserHelper {

if (helper == nil) {

helper = [[UserHelper alloc] init];

}

    return helper;

}

 

4> 安全執行緒寫法1

 

static UserHelper * helper = nil;

+ (UserHelper *)sharedUserHelper {

    @synchronized(self) {

        

        if (helper == nil) {

            helper = [[UserHelper alloc] init];

        }

    }

    return helper;

}

 

5> 安全執行緒寫法2

 

+ (void)initialize {

    

    if ([self class] == [UserHelper class]) {

        helper = [[UserHelper alloc] init];

    }

}

 

6、安全執行緒寫法3(蘋果推薦,主要用這個)

 

static UserHelper * helper = nil;

+ (UserHelper *)sharedUserHelper {

 

static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        helper = [[UserHelper alloc] init];

    });

    

    return helper;

}

 

7、MRC全面實現單例寫法(瞭解)-- 這裡先不做介紹。

 

iOS開發-OC篇-單例模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.