OC單例模式實現(xiàn)(ARC)

????單例是在我們在項目學(xué)習(xí)特別是在工具類的抽取中經(jīng)常用到的一種設(shè)計模式。說道底,單例就是一個類唯一的實例對象,我們無法通過alloc等其他方法來開辟一塊新的內(nèi)存,創(chuàng)建這個類的第二個實例對象。從而達到易于外界訪問,節(jié)約系統(tǒng)資源的目的。
????那么現(xiàn)在我們就模仿系統(tǒng)手動創(chuàng)建一個單例,首先聲明一個靜態(tài)的實例對象:

  static Person *_per;

????程序啟動立即創(chuàng)建實例對象

   //當(dāng)類被加載到內(nèi)存當(dāng)中時,就會調(diào)用load.
+(void)load {
   //1.程序一啟動,就創(chuàng)建一個對象
   Person *per = [[self alloc] init];
   //類方法是不能訪問當(dāng)前類的成員屬性.
   //self.per = per;
   _per = per;
   
}

????重寫系統(tǒng)的allocWithZone:方法

  // 重寫allocWithZone方法,
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    if (_per) {
      
       
      NSException *exc = [NSException exceptionWithName:@"NSInternalInconsistencyException" reason:@"There can only be one Person instance." userInfo:nil];
        //拋出異常
       [exc raise];
   }
       //保持系統(tǒng)的默認做法
   return [super alloc];
}

創(chuàng)建快速sharePerson方法,保證只有一個內(nèi)存

+ (Person *)sharePerson {
   return _per;
}

重寫系統(tǒng)的其他構(gòu)造方法

   - (id)copyWithZone:(struct _NSZone *)zone
  { 
         return _instance;
    }

   - (id)mutableCopyWithZone:(NSZone *)zone
 { 
       return _instance;
 }

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

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

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