關於Alamofire Manager單例的思考,AlamofireManager

來源:互聯網
上載者:User

關於Alamofire Manager單例的思考,AlamofireManager

今天跑到大學裡來看源碼,剛開學就有好多同學上自習,好久沒來過大學了,還是大學裡安靜。

今天看了一點Alamofire的源碼,其中Manager的單例如下:

    public static let sharedInstance: Manager = {        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()        configuration.HTTPAdditionalHeaders = Manager.defaultHTTPHeaders        return Manager(configuration: configuration)    }()

上面的代碼中使用public static let 定義了單例變數sharedInstance。看到這個單例我首先想到的是這樣寫然後將init方法設定成private的,就能夠實現單例了。但是看了一下源碼,源碼中的init方法竟然是public的,後來自己給解釋了一下,可能是作者給使用者留了建立自己執行個體的入口。但是想想這樣有點違背單例的思想了。

補充一點,在OC中建立單例一般如下:

+ (AccountManager *)sharedManager  {          static AccountManager *sharedAccountManagerInstance = nil;          static dispatch_once_t predicate;          dispatch_once(&predicate, ^{                  sharedAccountManagerInstance = [[self alloc] init];           });      return sharedAccountManagerInstance;  }  
網上還有判斷sharedAccountManagerInstance是否為空白,然後建立的,但是這種方式建立的單例,在多線程的情況下,容易出現問題。具體問題可以百度。


下面想說的是對於類型方法及屬性的修飾符:static和class關鍵字。首先列出來一篇文章,看完了這篇文章之後再回來看我寫的後面。這篇文章是王巍寫的,品質挺高的,地址:http://swifter.tips/static-class/。

在王巍的文章中詳細的介紹了static和class的使用方式。簡單的概括就是struct、enum中使用static,class中儲存屬性使用static、計算屬性和方法使用class。我自己做測試了在class中計算屬性和方法使用也可以使用static,所以如果不好記,直接都使用static也可以。

轉過來看一下上面Alamofire代碼中的共用執行個體的聲明,第一次看到我以為是一個計算屬性,因為後面跟著好多代碼。但是仔細一看,其實是一個儲存屬性,在等號後面其實是一個尾隨閉包,然後使用括弧,馬上獲得了閉包返回的值,然後賦值給了該儲存屬性。(對於這個可能說法不對,我原來看過這種情況叫什麼,可能記錯了,如果錯了麻煩給我指出)。

下面是廣告:

本人分享到github上整理的swift 2.0的playground。地址https://github.com/mengxiangyue/The-Swift-2.0-Programming-Language-playground


對應最新發行《The Swift Programming Language》Swift 2.0 版本一書中內容。這些Playground基本是書中知識點的一個總結,如果不想看英文書的人看這些Palyground都看完了,也基本算是看完了書中的內容。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.