原則上,單例是在程式生命週期裡只被例項化過一次的 類。為了確保這一點,我們利用類的乙個靜態方法來生成和訪問物件。
因此, 你是通過以便利方法來訪問某個類的單例物件的,而不是用 alloc/init或者靜態autorelease初始化方法。
在很多時候,我們使用乙個某個類的唯一例項。最常見的就是乙個程式的主類。
以下是以名為 rootviewcontroller 建立的乙個單例函式:
static rootviewcontroller*sharedrootcontroller = nil;
+(rootviewcontroller *) sharedcontroller
}return singlecontroller;
}+(id) allocwithzone:(nszone *)zone
}return nil;
}**說明:
1. synchronized 這個主要是考慮多執行緒的程式,這個指令可以將 內的**限制在乙個執行緒執行,如果某個執行緒沒有執行完,其他的執行緒如果需要執行就得等著。
2. 網上搜尋的**,好像有乙個沒有加入 autorelease ,我覺得應該需要加。因為如果呼叫的函式沒有release 就麻煩了。(個人認為ios 上的程式,對於建立用於函式返回值的,都應該考慮 autorelease)
3. allocwithzone 這個是過載的,因為這個是從制定的記憶體區域讀取資訊建立例項,所以如果需要的單例已經有了,就需要禁止修改當前單例。所以返回 nil
iOS設計模式之單例模式
單例模式 總是返回自己的同乙個例項,它提供了對類的物件所提供的資源的全域性訪問點,並且返回的例項只能被例項化一次.單例設計模式設計需要考慮的兩個問題 1 發起呼叫的物件不能以其他分配方式例項化單例物件,否則,就有可能建立單例類的多個例項 2 對單例物件例項化的限制應該與引用計數記憶體模型共存.sin...
iOS設計模式之單例模式
單例模式是ios常用設計模式中的一種。單例設計模式的作用是使得這個類的乙個物件成為系統中的唯一例項,因此需要用一種唯一的方法去建立這個物件並返回這個物件的位址。那麼,我們何時使用單例模式呢?1 類只能有乙個例項,而且必須從乙個為人熟知的訪問點對其訪問。2 這個唯一的例項只能通過子類化進行擴充套件,而...
iOS設計模式之單例模式
單例模式是ios常用設計模式中的一種。單例設計模式的作用是使得這個類的乙個物件成為系統中的唯一例項,因此需要用一種唯一的方法去建立這個物件並返回這個物件的位址。那麼,我們何時使用單例模式呢?1 類只能有乙個例項,而且必須從乙個為人熟知的訪問點對其訪問。2 這個唯一的例項只能通過子類化進行擴充套件,而...