iOS设计模式之单例模式
? ? ? 單例模式是iOS常用設(shè)計(jì)模式中的一種。單例設(shè)計(jì)模式的作用是使得這個(gè)類的一個(gè)對(duì)象成為系統(tǒng)中的唯一實(shí)例,因此需要用一種唯一的方法去創(chuàng)建這個(gè)對(duì)象并返回這個(gè)對(duì)象的地址。那么,我們何時(shí)使用單例模式呢?1、類只能有一個(gè)實(shí)例,而且必須從一個(gè)為人熟知的訪問點(diǎn)對(duì)其訪問。2、這個(gè)唯一的實(shí)例只能通過子類化進(jìn)行擴(kuò)展,而且擴(kuò)展的對(duì)象不會(huì)破壞客戶端代碼。
? ? 那么用Objective-C如何實(shí)現(xiàn)單例模式呢?下面我們來新建一個(gè)Singleton類,在Singleton.h中實(shí)現(xiàn)如下
?
[objc]?view plaincopy?
?
在Singleton.m
[objc]?view plaincopy
這樣就創(chuàng)建一個(gè)簡(jiǎn)單的單例模式,實(shí)際上有一部分程序員也是這樣實(shí)現(xiàn)的,但實(shí)際上這是一個(gè)不“嚴(yán)格”版本,在實(shí)際中使用,可能會(huì)遇到發(fā)起調(diào)用的對(duì)象不能以其他分配方式實(shí)例化單例對(duì)象,否則,就會(huì)創(chuàng)建多個(gè)實(shí)例。(之前有人和我討論過這個(gè)問題,說使用者應(yīng)該嚴(yán)格按照接口來使用,當(dāng)實(shí)際上Singleton是一個(gè)對(duì)象,我們不能保證使用者不會(huì)使用其他的方法去創(chuàng)建(比如alloc),這個(gè)時(shí)候他就會(huì)創(chuàng)建多個(gè)實(shí)例,這樣就會(huì)出現(xiàn)這些無法感知的bug)
?
?
下面我對(duì)Singleton.m的進(jìn)行改進(jìn)
[objc]?view plaincopy
也許你注意到了,我重載了allocWithZone:,保持了從sharedInstance方法返回的單例對(duì)象,使用者哪怕使用alloc時(shí)也會(huì)返回唯一的實(shí)例(alloc方法中會(huì)先調(diào)用allocWithZone:創(chuàng)建對(duì)象)。而retain等內(nèi)存管理的函數(shù)也被重載了,這樣做讓我們有了把Singleton類變得“嚴(yán)格”了。
轉(zhuǎn)載于:https://www.cnblogs.com/yueyingsuixing/p/3457725.html
總結(jié)
以上是生活随笔為你收集整理的iOS设计模式之单例模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Overview of the New
- 下一篇: TopFreeTheme精选免费模板【2