最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

swift中正確安全聲明一個(gè)單例的方法實(shí)例

 更新時(shí)間:2020年12月14日 09:46:04   作者:落葉情思  
這篇文章主要給大家介紹了關(guān)于swift中如何正確安全聲明一個(gè)單例的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Talk is cheap. Show me the code.

class TestShareInstance{
 var age:Int
 static let shareInstane:TestShareInstance = TestShareInstance(age: 3);
 private init(age:Int){
  self.age = age;
 };
}

說(shuō)說(shuō)原理

swift在類(lèi)中,類(lèi)變量是能夠保證線(xiàn)程安全,swift底層,static關(guān)鍵字的實(shí)際上是使用dispatch_once語(yǔ)法來(lái)實(shí)現(xiàn)的,如下一段swift編譯中間產(chǎn)物SIL語(yǔ)言中的代碼就能看到底層的實(shí)現(xiàn).

1.staic變量被聲明為全局變量

// static TestShareInstance.shareInstane
sil_global hidden [let] @static main.TestShareInstance.shareInstane : main.TestShareInstance : $TestShareInstance

2.在get方法中獲取變量調(diào)用了swift內(nèi)嵌的builtin "once",實(shí)際上調(diào)用的是swift_once方法

3.在swift源碼中可以搜索到swift_once方法的內(nèi)部實(shí)現(xiàn)如下,內(nèi)部調(diào)用的就是GCD底層的dispatch_once_f,保證了單例的線(xiàn)程安全。

/// Runs the given function with the given context argument exactly once.
/// The predicate argument must point to a global or static variable of static
/// extent of type swift_once_t.
void swift::swift_once(swift_once_t *predicate, void (*fn)(void *),
      void *context) {
#if defined(__APPLE__)
 dispatch_once_f(predicate, context, fn);
#elif defined(__CYGWIN__)
 _swift_once_f(predicate, context, fn);
#else
 std::call_once(*predicate, [fn, context]() { fn(context); });
#endif
}

在類(lèi)中,將TestShareInstance的init方法設(shè)置為了private,這能保證其他人沒(méi)有辦法調(diào)用你的init的方法,只能調(diào)用你的shareInstane單例變量;從而保證了單例的不可修改特性。如果你要強(qiáng)行修改,編譯器就會(huì)警告你,具體示例如下

到此這篇關(guān)于swift中正確安全聲明一個(gè)單例的文章就介紹到這了,更多相關(guān)swift正確安全聲明單例內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用swift實(shí)現(xiàn)卡片橫向滑動(dòng)動(dòng)畫(huà)效果的方法示例

    利用swift實(shí)現(xiàn)卡片橫向滑動(dòng)動(dòng)畫(huà)效果的方法示例

    卡片橫向滑動(dòng)動(dòng)畫(huà)效果相信對(duì)大家來(lái)說(shuō)都不陌生,下面這篇文章主要給大家介紹了關(guān)于利用swift實(shí)現(xiàn)卡片橫向滑動(dòng)動(dòng)畫(huà)效果的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • SwiftUI 登錄界面布局實(shí)現(xiàn)示例詳解

    SwiftUI 登錄界面布局實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了SwiftUI 登錄界面布局實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Swift HTTP加載請(qǐng)求Loading Requests教程

    Swift HTTP加載請(qǐng)求Loading Requests教程

    這篇文章主要為大家介紹了Swift HTTP加載請(qǐng)求Loading Requests教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 在?Swift?中編寫(xiě)Git?Hooks腳本的方法

    在?Swift?中編寫(xiě)Git?Hooks腳本的方法

    在本例中,我使用了?commit-msg?鉤子,它能夠在當(dāng)前提交信息生效前修改此信息,鉤子由一個(gè)參數(shù)調(diào)用,該參數(shù)是指向包含用戶(hù)輸入的提交消息的文件的路徑,這意味著,為了改變提交消息,我們只需要從文件中讀取、修改其內(nèi)容,然后寫(xiě)回調(diào)用掛鉤的文件
    2022-06-06
  • 詳解Swift語(yǔ)言的while循環(huán)結(jié)構(gòu)

    詳解Swift語(yǔ)言的while循環(huán)結(jié)構(gòu)

    這篇文章主要介紹了Swift語(yǔ)言的while循環(huán)結(jié)構(gòu),包括do...while循環(huán)的用法,需要的朋友可以參考下
    2015-11-11
  • Swift實(shí)現(xiàn)堆排序算法的代碼示例

    Swift實(shí)現(xiàn)堆排序算法的代碼示例

    堆排序(HeapSort)是一樹(shù)形選擇排序,堆排序的時(shí)間復(fù)雜度O(nlogn),這里我們來(lái)看一下Swift實(shí)現(xiàn)基堆排序算法的代碼示例,首先對(duì)堆排序算法的基本概念作一個(gè)了解:
    2016-06-06
  • swift閉包和OC block類(lèi)型的使用

    swift閉包和OC block類(lèi)型的使用

    這篇文章主要介紹了swift閉包和OC block類(lèi)型的使用,需要的朋友可以參考下
    2017-08-08
  • Swift實(shí)現(xiàn)監(jiān)聽(tīng)鍵盤(pán)通知及一些處理詳解

    Swift實(shí)現(xiàn)監(jiān)聽(tīng)鍵盤(pán)通知及一些處理詳解

    這篇文章主要給大家介紹了關(guān)于Swift實(shí)現(xiàn)監(jiān)聽(tīng)鍵盤(pán)通知及一些處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Swift如何為設(shè)置中心添加常用功能

    Swift如何為設(shè)置中心添加常用功能

    這篇文章主要給大家介紹了關(guān)于Swift如何為設(shè)置中心添加常用功能的相關(guān)資料,包含了跳轉(zhuǎn)到AppStore、郵件反饋功能、系統(tǒng)分享功能以及打開(kāi)某些網(wǎng)址等功能,需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2018-05-05
  • Swift實(shí)現(xiàn)快速排序算法的代碼示例

    Swift實(shí)現(xiàn)快速排序算法的代碼示例

    這篇文章主要介紹了Swift實(shí)現(xiàn)快速排序算法的代碼示例,首先利用分治法講解了快速排序的思路,需要的朋友可以參考下
    2016-07-07

最新評(píng)論

哈巴河县| 沂源县| 太原市| 安丘市| 应城市| 林甸县| 邓州市| 从化市| 黔江区| 平果县| 牟定县| 泸水县| 常德市| 陈巴尔虎旗| 汤阴县| 梁山县| 松溪县| 山西省| 通渭县| 盐亭县| 沅江市| 丰台区| 雅安市| 长丰县| 中卫市| 南澳县| 山丹县| 永胜县| 四川省| 靖江市| 洛隆县| 合肥市| 安陆市| 尖扎县| 乐平市| 古浪县| 顺昌县| 德州市| 长阳| 富裕县| 叙永县|