iOS中的單例模式如何銷毀重建

在iOS中,單例模式是比較常用的一種模式,保證相關代碼只會執(zhí)行一次,但有時候會有一種場景,需要銷毀單例進行重建。

如果不采用GCD提供的dispatch_once方法,需要加鎖操作,是比較耗性能的。

那么這個時候如何繼續(xù)采用dispatch_once方法?

dispatch_once_t的描述是:


typedef long dispatch_once_t;

dispatch_once在判斷是否需要執(zhí)行的關鍵語句:


if(DISPATCH_EXPECT(*predicate, ~0l) != ~0l) {

dispatch_once_f(predicate, context, function);

}

可以了解到 dispatch_once_t參數(shù)的初始值就是0l,只需要重置dispatch_once_t參數(shù)及實例參數(shù),具體代碼如下:


static SpTest *sInstance = nil;

static dispatch_once_t onceToken;

+ (instancetype)sharedManager

{

  dispatch_once(&onceToken, ^{

    sInstance= [[self alloc] init];;

    NSLog(@"dispatch once");

});

  return sInstance;

}

+ (void)tearDown{

  sInstance=nil;

  onceToken=0l;

}

回過頭來想想,其實這樣實現(xiàn)是一種比較粗陋的方式,需要考慮在銷毀的同時實例的使用狀況等,其實是違背dispatch_once使用的初衷的。

不排除真的有這種單例需要銷毀的場景,但多數(shù)需要銷毀的單例實際上可能不適用于單例這種模式,可能需要重新考慮架構設計問題。

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

相關閱讀更多精彩內容

  • 單例模式 什么是單例模式? 單例模式想一個大獨裁者,他規(guī)定在他的國度里面,所有數(shù)據(jù)的訪問和請求都得經(jīng)過他,甚至你要...
    GitHubPorter閱讀 1,250評論 0 4
  • @WilliamAlex大叔 前言 目前流行的社交APP中都離不開單例的使用,我們來舉個例子哈,比如現(xiàn)在流行的"糗...
    Alexander閱讀 2,009評論 6 28
  • 在iOS中,單例模式是比較常用的一種模式,保證相關代碼只會執(zhí)行一次,但有時候會有一種場景,需要銷毀單例進行重建。 ...
    ShanJiJi閱讀 3,197評論 0 3
  • 單例模式(SingletonPattern)一般被認為是最簡單、最易理解的設計模式,也因為它的簡潔易懂,是項目中最...
    成熱了閱讀 4,530評論 4 34
  • “二呀么二郎山,高呀么高萬丈”,現(xiàn)在我站在川藏線第一個標志性的隧道前,或許是天氣的原因,云山霧罩間,二郎山青翠有余...
    一個人的細水長流gsy閱讀 658評論 0 1

友情鏈接更多精彩內容