一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

關(guān)于iOS開(kāi)發(fā)單例使用問(wèn)題

大?。?/span>0.08 MB 人氣: 2017-09-25 需要積分:1

  原文鏈接:Avoiding Singleton Abuse

  

  導(dǎo)語(yǔ)

  單例(Singletons),是Cocoa的核心模式之一。在iOS上,單例十分常見(jiàn),比如:UIApplication,NSFileManager等等。雖然它們用起來(lái)十分方便,但實(shí)際上它們有許多問(wèn)題需要注意。所以在你下次自動(dòng)補(bǔ)全dispatch_once代碼片段的時(shí)候,想一下這樣會(huì)導(dǎo)致什么后果。

  什么是單例

  在《設(shè)計(jì)模式》一書(shū)中給出了單例的定義:

  單例模式:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。

  單例模式提供了一個(gè)訪問(wèn)點(diǎn),供客戶類為共享資源生成唯一實(shí)例,并通過(guò)它來(lái)對(duì)共享資源進(jìn)行訪問(wèn),這一模式提供了靈活性。

  在objective-c中,可以使用以下代碼創(chuàng)建一個(gè)單例:

  +(instancetype)sharedInstance

  {

  static dispatch_once_t once;

  static id sharedInstance;

  dispatch_once(&once, ^{

  sharedInstance = [[self alloc]init];

  });

  return sharedInstance;

  }

  當(dāng)類只能有一個(gè)實(shí)例,而且必須從一個(gè)訪問(wèn)點(diǎn)對(duì)其進(jìn)行訪問(wèn)時(shí)使用單例就顯得十分方便,因?yàn)槭褂脝卫WC了訪問(wèn)點(diǎn)的唯一、一致且為人熟知。

  單例中的問(wèn)題

  全局狀態(tài)

  首先我們都應(yīng)該達(dá)成一個(gè)共識(shí)“全局可變狀態(tài)”是危險(xiǎn)的,因?yàn)檫@樣會(huì)讓程序變得難以理解和調(diào)試,就削減狀態(tài)性代碼上,面向?qū)ο?a href='http://www.www27dydycom.cn/v/tag/1315/' target='_blank' class='arckwlink_none'>編程應(yīng)該向函數(shù)式編程學(xué)習(xí)。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?