iOS開發 OC篇 單例模式

2022-07-29 01:45:08 字數 1651 閱讀 2860

回顧一下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 {

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 {

dispatch_once(&oncetoken, ^{

helper = [[userhelper alloc] init];

return helper;

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

OC學習篇之 單例模式

在之前的一片文章中介紹了物件的拷貝相關知識 今天我們來看一下oc中的單例模式,單例模式在設計模式中用的可能是最多的一種了,而且也是最簡單的一種 實現單例模式有三個條件 1 類的構造方法是私有的 2 類提供乙個類方法用於產生物件 3 類中有乙個私有的自己物件 針對於這三個條件,oc中都是可以做到的 1...

oc單例模式

1 單例模式概念 1 什麼是單例模式 singleton 單例模式的意圖是是的類的物件成為系統中唯一的例項,提供乙個訪問點,供客戶類 共享資源。2 什麼情況下使用單例?1 類只能有乙個例項,而且必須從乙個為人熟知的訪問點對其進行訪問,比如工廠方法。2 這個唯一的例項只能通過子類化進行擴充套件,而且擴...

OC 單例模式

設計模式 用來解決某一特定問題 單例模式 什麼時候使用單例模式?在工程中,一些類只需要乙個例項變數,我們就可以將這些類設計成單例模式 單例模式的作用?當乙個類a被設計成單例模式時,由類a構造出的例項物件之於其他類來說為全域性例項物件,即在每乙個類中由類a構建的例項物件 都是同乙個物件 在oc中如何將...