iOS開發(fā)中的設(shè)計(jì)模式----單例模式

iOS開發(fā)中有很多種設(shè)計(jì)模式,這篇文章寫的是單例模式,其它設(shè)計(jì)模式后續(xù)會更新。。。

先來看看百度百科中對單例模式的定義:

單例模式是設(shè)計(jì)模式中最簡單的形式之一。這一模式的目的是使得類的一個對象成為系統(tǒng)中的唯一實(shí)例。要實(shí)現(xiàn)這一點(diǎn),可以從客戶端對其進(jìn)行實(shí)例化開始。因此需要用一種只允許生成對象類的唯一實(shí)例的機(jī)制,“阻止”所有想要生成對象的訪問。使用工廠方法來限制實(shí)例化過程。這個方法應(yīng)該是靜態(tài)方法(類方法),因?yàn)樽岊惖膶?shí)例去生成另一個唯一實(shí)例毫無意義。

1.第一句話說明了單例是一種設(shè)計(jì)模式,有很多人在面試被問到單例時經(jīng)常說:單例是一個對象,它在程序運(yùn)行中是唯一的。這是把單例的定義和作用混淆了,它的作用是保證程序運(yùn)行過程中對象的唯一性,所以這點(diǎn)需要注意。

2.后面說的就是如何實(shí)現(xiàn)單例了,其中提到需要創(chuàng)建一個靜態(tài)方法(類方法),這正是需要我們?nèi)プ龅?/p>

以下就是單例類中的寫法,單例的寫法有很多種,這里不一一介紹了
#import <Foundation/Foundation.h>

@interface Singleton : NSObject
+ (instancetype) singleton;
@end

#import "Singleton.h"

//創(chuàng)建一個靜態(tài)變量
static Singleton * instance = nil;
@implementation Singleton

//通過此類方法創(chuàng)建對象,保證唯一性
+ (instancetype)singleton {

    //通過GCD實(shí)現(xiàn)對象只創(chuàng)建一次
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    
        instance = [[super allocWithZone:NULL] init];
    });
    return instance;
}

//防止通過【[Singleton alloc] init]創(chuàng)建對象,因此需要重寫這個方法,
//因?yàn)檎{(diào)用alloc時會自動調(diào)用allocWithZone這個方法
+ (instancetype)allocWithZone:(struct _NSZone *)zone{


    return [Singleton singleton];
}

//防止通過copy和mutableCopy創(chuàng)建對象,安全起見,重寫以下兩個方法
- (id)copy {

    return self;
}
- (id)mutableCopy{

    return self;
}
@end

下面是測試代碼

//創(chuàng)建四個對象
Singleton * singleton1 = [Singleton singleton];
Singleton * singleton2 = [Singleton singleton];
Singleton * singleton3 = [Singleton singleton];
Singleton * singleton4 = [[Singleton alloc] init];

//打印內(nèi)存地址
NSLog(@"%p----%p----%p----%p",singleton1, singleton2, singleton3, singleton4);

測試結(jié)果

測試結(jié)果

從打印結(jié)果可以看出,四個地址是同一地址,說明對象是唯一的,單例類測試成功!??!

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

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

  • 單例模式(SingletonPattern)一般被認(rèn)為是最簡單、最易理解的設(shè)計(jì)模式,也因?yàn)樗暮啙嵰锥?,是?xiàng)目中最...
    成熱了閱讀 4,544評論 4 34
  • 1 單例模式的動機(jī) 對于一個軟件系統(tǒng)的某些類而言,我們無須創(chuàng)建多個實(shí)例。舉個大家都熟知的例子——Windows任務(wù)...
    justCode_閱讀 1,558評論 2 9
  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,093評論 1 15
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 前言 本文主要參考 那些年,我們一起寫過的“單例模式”。 何為單例模式? 顧名思義,單例模式就是保證一個類僅有一個...
    tandeneck閱讀 2,628評論 1 8

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