iOS中的單例

什么是單例,為什么要用單例?

1,單例模式:

確保某一個(gè)類只有一個(gè)實(shí)例。單例模式只會(huì)生成一個(gè)對(duì)象。內(nèi)存空間永遠(yuǎn)是一個(gè),保證實(shí)體的唯一性。其他類可以通過全局的入口點(diǎn)對(duì)這個(gè)實(shí)例進(jìn)行訪問。iOS sdk中也有許多類使用了單例模式,例如UIApplication:當(dāng)程序啟動(dòng)時(shí),會(huì)調(diào)用UIApplicationMain方法,在該方法中,會(huì)實(shí)例化一個(gè)UIApplication對(duì)象,之后在程序中的任意地方調(diào)用shareApplication都將返回一個(gè)與當(dāng)前應(yīng)用程序相關(guān)的UIApplication實(shí)例。以及:[NSUserDefaluts standardUserDefaults]也是返回的一個(gè)單例對(duì)象,因?yàn)椴荒茏尣煌膗d對(duì)象去修改文件

2,單例模式的使用:

1,GCD:

+ (MyDataHelper *)shareMyDataHelper {

static MyDataHelper * myDataHelper = nil;

static dispatch_once_t takeOnce;

dispatch_once(&takeOnce,^{

myDataHelper = [self alloc]init];

} );

return myDataHelper;

}

利用GCD,可以保證初始化代碼只實(shí)現(xiàn)一次。前提是takeonce指針也必須是全局或者靜態(tài)變量。

因?yàn)閟tatic 修飾的成員變量只會(huì)初始化一次,如果不聲明為靜態(tài)變量,那么每次進(jìn)來,都會(huì)重置變量為nil,那么就會(huì)重新創(chuàng)建對(duì)象。

2,重寫init,alloc方法,

1)先寫一個(gè)創(chuàng)建單例的方法

static MyDataHelper * myDataHelper = nil;

+ (MyDataHelper *)shareMyDataHelper {

@synchronized(self)

{

if (myDataHelper == nil)

{

[self alloc]init];

}

return myDataHelper;

}

+ (id)allocWithZone:(NSZone *)zone//在alloc分配內(nèi)存空間的時(shí)候,是調(diào)用的allocWithZone分配空間

@synchronized(self){

if (myDataHelper == nil)

{

myDataHelper = [super allocWithZone:zone];

return myDataHelper;

}

}

return nil;

-(id)init {

@synchronized(self){

if( self ==[super init])

{

//初始化

}

return self;

- (id)copyWithZone:(NSZone *)zone{

return self;

}

以下是非ARC模式下需要添加的

-(unsigned)retainCount{

return 1// 永遠(yuǎn)到返回1

}

- (oneway void)release {

釋放的時(shí)候什么也不做 }

(oneway 修飾符)表示此操作是單項(xiàng)的,這樣做意味著方法就算返回了什么,調(diào)用者也拿不到這個(gè)方法


如果需要實(shí)現(xiàn)單例的多態(tài),就拿到單例對(duì)象之后,重新進(jìn)行初始化就行。

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • @WilliamAlex大叔 前言 目前流行的社交APP中都離不開單例的使用,我們來舉個(gè)例子哈,比如現(xiàn)在流行的"糗...
    Alexander閱讀 2,009評(píng)論 6 28
  • 什么是單例模式? 單例模式是一種常用的軟件設(shè)計(jì)模式??梢员WC通過單例模式可以保證系統(tǒng)中一個(gè)類只有一個(gè)實(shí)例而且該實(shí)例...
    WakeMeUP1閱讀 1,038評(píng)論 0 2
  • 單例模式是日常開發(fā)工作中經(jīng)常會(huì)用到的一種設(shè)計(jì)模式。通過單例模式,可以保證程序中的一個(gè)類只有一個(gè)實(shí)例,從而方便對(duì)實(shí)例...
    狼鳳皇閱讀 226評(píng)論 0 0
  • 單例模式大概是設(shè)計(jì)模式中最簡單的一個(gè)。本來沒什么好說的,但是實(shí)踐過程中還是有一些坑。所以本文小結(jié)一下在iOS開發(fā)中...
    qiushuitian閱讀 3,797評(píng)論 1 21
  • 單例模式 什么是單例模式? 單例模式想一個(gè)大獨(dú)裁者,他規(guī)定在他的國度里面,所有數(shù)據(jù)的訪問和請(qǐng)求都得經(jīng)過他,甚至你要...
    GitHubPorter閱讀 1,250評(píng)論 0 4

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