OC中單例禁用init方法

2021-07-29 06:18:56 字數 712 閱讀 1398

一種是在init方法裡丟擲異常

- (instancetype)init
然後構建乙個私有的init方法,在裡面呼叫[super init],然後單例實現中就呼叫私有的init方法!

還有一種是直接在init中返回單例

- (instancetype)init
同樣的,也是需要構建乙個私有的init方法,再在單例中呼叫私有的init方法!

但是這兩種方法都可以正常呼叫,而且前一種會在你執行的時候才會報錯崩掉!所以想要方便省事推薦使用第二種!力求穩妥,推薦使用第一種.

最近在看框架的時候,偶然找到了乙個編譯器相關的方法

在.h檔案中直接宣告init方法是不可用的,然後單例實現中改為

+ (instancetype)shareinstance);

return classa;

}

然後在其他人直接通過類名呼叫[[class alloc]init],編譯器就會產生警告!編譯也會不通過,但是可以通過[[[class class]alloc]init]進行初始化.

所以這樣還是能夠獲取乙個非單例的物件!所以如果想要採用嚴格的禁用的話,還是採用上面的第一種方式,第一種方式就算通過類名進行alloc然後init也會崩的!

如果想要醒目的提示init方法被禁用了,就可以採用最後的方法

OC中的單例

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

oc單例模式

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

OC 單例設計

這段時間公司基本沒有什麼業務,也正好總結總結以前用過的東西,跟大家簡單分享一下,相互學習一下。直接主題,說一下我印象中的單例設計模式,本篇主要圍繞下面4個問題說下 1.單例是什麼?單例就是一種常用的設計模式,就是乙個類在系統中只有乙個例項物件,通過全域性的乙個入口對這個例項物件進行訪問,就是這麼簡單...