1舒萎、什么是單例?
????單例模式是設(shè)計(jì)模式中最簡(jiǎn)單的形式之一蹭沛。這一模式的目的是使得類的一個(gè)對(duì)象成為系統(tǒng)中的唯一實(shí)例臂寝,在需要全局資源共享的對(duì)象時(shí),經(jīng)常會(huì)用到這種設(shè)計(jì)模式摊灭。
2咆贬、單例的作用
?顧名思義,單例帚呼,即是在整個(gè)項(xiàng)目中掏缎,這個(gè)類的對(duì)象只能被初始化一次。它的這種特性煤杀,可以廣泛應(yīng)用于某些需要全局共享的資源中眷蜈,比如管理類,引擎類沈自,也可以通過單例來實(shí)現(xiàn)傳值酌儒。UIApplication、NSUserDefaults等都是IOS中的系統(tǒng)單例枯途。
3忌怎、單例的寫法
? ? ? ?單例的寫法常用的有兩種方式:
????? ?方式1、不考慮線程安全
? ?方式2酪夷、考慮線程安全 ?(一般用用得最多的也就是這種)
通過上面的方法榴啸,我們已經(jīng)可以使用類方法來得到這個(gè)單例,但是很多時(shí)候晚岭,項(xiàng)目的工程量很大插掂,還有可能會(huì)很多開發(fā)者同時(shí)參與一個(gè)項(xiàng)目的開發(fā),有的也會(huì)用到這個(gè)單例,例如上面二種方法辅甥,在 ?alloc ?或者new ?的方式創(chuàng)建時(shí)就會(huì)重新在內(nèi)存中開辟內(nèi)存空間了酝润,如下圖:
4、代碼的優(yōu)化
因?yàn)橥ㄟ^alloc或者copy還是new璃弄,都是通過調(diào)用allocWithzone和copyWithzone來分配空間的,所以我們重寫allocWithZone 方法:
我們?cè)俅未蛴∠聝?nèi)存地址看看是否相同:
通過上面的優(yōu)化后不管是new 還是alloc ?創(chuàng)建出來的都是全局唯一的對(duì)象啦 要销!