iOS 單例模式詳解
關於單例模式的使用,系統中有很多單面模式使用的例子 如:
[UIApplication sharedApplication]
[NSUserDefaults standardUserDefaults]
[NSNotificationCenter defaultCenter]
.......
本文將講解
1,如何建立及使用單例類
新建一個工程
建立繼承與NSObject檔案
![3104940-ab2919fc1a7ccc84.png](https://i.iter01.com/images/30bdfa1c6d3b05a83d0ae0f321b9fc016151155fb4505696732fb5e3510cd120.png)
在.h 中宣告單例物件
![3104940-5c93ed67068b6b97.png](https://i.iter01.com/images/81f98533e9a1eae43ea5eda1ff6f976a2e0ea48026c61ee87837fb325c4c48e0.png)
.m中
![3104940-e8c5a089826ca328.png](https://i.iter01.com/images/993a395eb4ce875d85045f8da6e1f94c0fc878183f44e3955eefa43de7c25d95.png)
這是最初的建立方法,但是這麼建立會出現過資料混亂,爭奪資源的情況(多執行緒的出現,使得在極端條件下,單例也可能返回了不同的物件。如在單例初始化完成前,多個程式同時訪問單例,那麼這些程式可能都獲得了不同的單例物件。)
為了避免這種情況我們要加入以下程式碼
![3104940-7ae0e1f0099fdbaa.png](https://i.iter01.com/images/71fb4d15e1d433916322cc5f95a2a081e8bbc7ae46daf225f83efb0658af4d4d.png)
此時的單例類大致已經建立好了
我們在 AppDelegate
![3104940-7b428bc1a7ee50a2.png](https://i.iter01.com/images/22ab36ab3ba52bcb64d211382449bdf18985a0a367bec93f815b3c3075e269f0.png)
然後在ViewController
![3104940-c4d94be503494d4e.png](https://i.iter01.com/images/d033555568afa6b21b9975d46840a9cc0475e76f94e4173a39d53cf6776b1cce.png)
![3104940-b8f920366a6a0ffc.png](https://i.iter01.com/images/e5a461df15331af7a16dec57dc7a07855f2faf34613c1e169021cba3aa38289b.png)
此時一切OK了嗎?並沒有,單例,單例 就是保證其唯一性
此時的單例類的子類是可以繼承的。
那麼就要限制子類來繼承它
2,如何防止子類繼承
![3104940-f256cbe79e855114.png](https://i.iter01.com/images/0f170ab404fcf344bd1a001da515b97f83a791451a951a21b3bbbfa8a30b2961.png)
此時單例類建立單例物件並不唯一,如
![3104940-e44ddc2d4a550561.png](https://i.iter01.com/images/ddcb710c1f4b883f22c93251cffcef95ed4eef400f7a6c5eb20821f58cb78ed9.jpg)
3,保證建立例項物件只能出現一個
這時我們要重寫單例類的init方法
![3104940-0589fffb95f26057.png](https://i.iter01.com/images/86eab71bdbe8c97728c2319a0e7101847a3a50ca6abd1ce46f1484ca1efa583d.png)
這時我們的單例類就完成啦!
相關文章
- 設計模式之單例模式詳解設計模式單例
- c#中單例模式詳解C#單例模式
- Javascript設計模式Revealing Module 揭示模式單例模式詳解JavaScript設計模式單例
- iOS設計模式詳解iOS設計模式
- java-單例詳解Java單例
- PHP單例模式模擬Java Bean實現方法示例詳解PHP單例模式JavaBean
- python單例的使用詳解Python單例
- iOS單例物件iOS單例物件
- 詳談單例、餓漢、和懶漢模式單例模式
- 單例模式單例模式
- EventBus詳解及簡單例項單例
- 創造模式 單例模式模式單例
- 建立型模式:單例模式模式單例
- 設計模式(單例模式)設計模式單例
- [設計模式] 單例模式設計模式單例
- 設計模式-單例模式設計模式單例
- 設計模式 —— 單例模式設計模式單例
- 設計模式 單例模式設計模式單例
- 設計模式——單例模式設計模式單例
- 單例模式解析單例模式
- python 單例模式Python單例模式
- java 單例模式Java單例模式
- 單例模式(Singleton)單例模式
- php單例模式PHP單例模式
- 單例模式(3)單例模式
- Java單例模式Java單例模式
- 單例模式 singleton單例模式
- 單例模式(SingletonPattern)單例模式
- python單例模式Python單例模式
- 您的單例模式,真的單例嗎?單例模式
- 單例模式,真不簡單單例模式
- 設計模式學習(一)單例模式補充——單例模式析構設計模式單例
- 設計模式-單例模式、多例模式設計模式單例
- 設計模式(一)_單例模式設計模式單例
- 常用設計模式-單例模式設計模式單例
- 設計模式之單例模式設計模式單例
- Java設計模式【單例模式】Java設計模式單例
- Java設計模式 | 單例模式Java設計模式單例
- 001設計模式:單例模式設計模式單例