iOS開發(fā)之單例模式

一. 單例模式簡(jiǎn)介:
首先我們應(yīng)該明白,我們每個(gè)項(xiàng)目中AppDelegate就是一個(gè)完美的單例.
(1)在程序運(yùn)行過程中,單例只有一個(gè)實(shí)例對(duì)象,而且該實(shí)例易于供外界訪問,從而方便控制了實(shí)例個(gè)數(shù),節(jié)約資源.
(2)單例一般用于工具類,在整個(gè)應(yīng)用程序中,字需要初始化一次,就可以共享一份資源.
(3)單例模式因?yàn)榭刂屏藢?shí)例化過程,所以累哦可以更加靈活實(shí)例化過程.
(4)單例對(duì)象一但被建立起來,對(duì)象指針被保留在靜態(tài)區(qū),在堆中分配的內(nèi)存空間,不會(huì)自動(dòng)釋放,只有在程序終止,即殺死APP才會(huì)被釋放.
(5)單例類無法實(shí)現(xiàn)OC的繼承特性,因?yàn)槭褂美^承,同事也會(huì)繼承靜態(tài)變量,而子類和父類同時(shí)創(chuàng)建的時(shí)候只會(huì)創(chuàng)建一個(gè)先創(chuàng)建的實(shí)例對(duì)象,因此一般不做類的擴(kuò)展.
(6)單例可用來傳值.
注:如果同一類型的對(duì)象總是要在不同是用例場(chǎng)景發(fā)生變化,單例就會(huì)引起數(shù)據(jù)的錯(cuò)誤,不能保存彼此的狀態(tài).我們?cè)谑褂脝卫愔?一定要考慮好單例類是否適合類以后的擴(kuò)展性,避免盲目濫用單例.

二.單例的代碼實(shí)現(xiàn):
單例都是繼承于NSObject,首先,聲明初始化方法

Singleton.h

@interface Singleton : NSObject

+(instancetype) shareInstance ;

@end

單例的實(shí)現(xiàn)方法有很多種,例如:

#import "Singleton.h"

static Singleton *instance = nil;
@implementtation Singleton
+(instancetype) shareInstance{
/// 1. GCD 最簡(jiǎn)單,常用的方法,很方便
     static dispath_once_t onceToken;
     dispath_once(&onceToken, ^{
          if (instance == nil) {
              instance = [[self alloc] init]; 
// 或       instance = [[Singleton alloc] init];
          }
     });
return instance;
// 返回值的類型可以是id,instancetype,或者類名(Singleton),不過要與聲明保持一致.
// 2. 線程鎖,(GCD是線程封裝)
@synchronized (self) {
  // 為了防止多線程同時(shí)訪問對(duì)象, 造成多次分配內(nèi)存空間, 所以要加上縣城鎖
       if (instance == nil) {
           instance = [[self alloc] init];
      }
     return instance;
   }
}
@end

調(diào)用很簡(jiǎn)單[Singleton shareInstance]獲取單例對(duì)象,做自己想干的事就好了.
單例很重要,用起來很方便,但并不難,這些在簡(jiǎn)單項(xiàng)目中足夠了,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 單例模式(SingletonPattern)一般被認(rèn)為是最簡(jiǎn)單、最易理解的設(shè)計(jì)模式,也因?yàn)樗暮?jiǎn)潔易懂,是項(xiàng)目中最...
    成熱了閱讀 4,536評(píng)論 4 34
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 前言 本文主要參考 那些年,我們一起寫過的“單例模式”。 何為單例模式? 顧名思義,單例模式就是保證一個(gè)類僅有一個(gè)...
    tandeneck閱讀 2,625評(píng)論 1 8
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,662評(píng)論 18 399
  • 只要是下雨,不管在哪里,都會(huì)有一種淅淅瀝瀝的孤寂感,不在乎別人會(huì)怎樣,只一樣,如果沒有帶傘,困在一個(gè)地方,動(dòng)彈不得...
    幸星子閱讀 281評(píng)論 0 0

友情鏈接更多精彩內(nèi)容