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

Swift編程中用以管理內(nèi)存的自動引用計(jì)數(shù)詳解

 更新時間:2015年11月05日 16:16:40   投稿:goldensun  
這篇文章主要介紹了Swift編程中用以管理內(nèi)存的自動引用計(jì)數(shù)詳解,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

Swift 內(nèi)存管理功能是通過使用自動引用計(jì)數(shù)(ARC)來處理。ARC用于初始化和取消初始化所述系統(tǒng)資源,從而釋放使用的類實(shí)例的存儲器空間當(dāng)實(shí)例不再需要。ARC跟蹤代碼的實(shí)例有效地管理存儲資源之間的關(guān)系的信息。

ARC的功能

  • 在每一次一個新的類實(shí)例被創(chuàng)建時ARC分配一塊內(nèi)存以存儲信息 init()
  • 關(guān)于實(shí)例類型和其值的信息存儲在存儲器中
  • 當(dāng)類實(shí)例不再需要它自動由 deinit() 釋放,用于進(jìn)一步類實(shí)例的存儲和檢索的存儲空間
  • ARC保存在磁道當(dāng)前參照類實(shí)例的屬性,常量和變量,使得 deinit() 僅適用于那些不使用的實(shí)例。
  • ARC維護(hù)“強(qiáng)引用”這些類實(shí)例屬性,常量和變量來限制釋放當(dāng)當(dāng)前的類實(shí)例正在使用。

ARC 程序

復(fù)制代碼 代碼如下:

class StudDetails {
    var stname: String!
    var mark: Int!
    init(stname: String, mark: Int) {
        self.stname = stname
        self.mark = mark
    }
   
    deinit {
        println("Deinitialized \(self.stname)")
        println("Deinitialized \(self.mark)")
    }
}

let stname = "swift"
let mark = 98

println(stname)
println(mark)


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

swift
98

ARC 強(qiáng)參考周期類實(shí)例

復(fù)制代碼 代碼如下:

class studmarks {
    let name: String
    var stud: student?
   
    init (name: String) {
        println("Initializing: \(name)")
        self.name = name
    }
   
    deinit {
        println("Deallocating: \(self.name)")
    }
}

class student {
    let name: String
    var strname: studmarks?
   
    init (name: String) {
        println("Initializing: \(name)")
        self.name = name
    }
   
    deinit {
        println("Deallocating: \(self.name)")
    }
}

var shiba: studmarks?
var mari: student?

shiba = studmarks(name: "Swift")
mari = student(name: "ARC")

shiba!.stud = mari
mari!.strname = shiba


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

Initializing: Swift
Initializing: ARC

ARC弱和無主參考
Class類型屬性有兩種方法可以解決強(qiáng)引用周期:

  1. 弱引用
  2. 無主參考

這些引用是用來使一個實(shí)例指在一個基準(zhǔn)周期其他實(shí)例。然后實(shí)例可以為每一個實(shí)例參考代替處理強(qiáng)引用周期。當(dāng)用戶知道某些情況下可能會返回 'nil' 值,我們可能會指向使用弱引用。當(dāng)實(shí)例會返回不是零的東西,然后使用無主參考聲明。

弱引用程序

復(fù)制代碼 代碼如下:

class module {
    let name: String
    init(name: String) { self.name = name }
    var sub: submodule?
    deinit { println("\(name) Is The Main Module") }
}

class submodule {
    let number: Int
   
    init(number: Int) { self.number = number }
   
    weak var topic: module?
   
    deinit { println("Sub Module with its topic number is \(number)") }
}

var toc: module?
var list: submodule?
toc = module(name: "ARC")
list = submodule(number: 4)
toc!.sub = list
list!.topic = toc

toc = nil
list = nil


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

ARC Is The Main Module
Sub Module with its topic number is 4

無主參考程序

復(fù)制代碼 代碼如下:

class student {
    let name: String
    var section: marks?
   
    init(name: String) {
        self.name = name
    }
   
    deinit { println("\(name)") }
}
class marks {
    let marks: Int
    unowned let stname: student
   
    init(marks: Int, stname: student) {
        self.marks = marks
        self.stname = stname
    }
   
    deinit { println("Marks Obtained by the student is \(marks)") }
}

var module: student?
module = student(name: "ARC")
module!.section = marks(marks: 98, stname: module!)
module = nil


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

ARC
Marks Obtained by the student is 98

閉包強(qiáng)引用周期
當(dāng)我們分配一個閉包至類實(shí)例屬性,閉包的主體以捕獲特定實(shí)例強(qiáng)參考周期發(fā)生。強(qiáng)引用閉合由 self.someProperty 或 self.someMethod()定義。強(qiáng)引用周期用作閉包引用類型。

復(fù)制代碼 代碼如下:

class HTMLElement {
    let samplename: String
    let text: String?
   
    lazy var asHTML: () -> String = {
        if let text = self.text {
            return "<\(self.samplename)>\(text)</\(self.samplename)>"
        } else {
            return "<\(self.samplename) />"
        }
    }
   
    init(samplename: String, text: String? = nil) {
        self.samplename = samplename
        self.text = text
    }
   
    deinit {
        println("\(samplename) is being deinitialized")
    }
}

var paragraph: HTMLElement? = HTMLElement(samplename: "p", text: "Welcome to Closure SRC")
println(paragraph!.asHTML())


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

<p>Welcome to Closure SRC</p>
弱和無主參考
當(dāng)閉包和實(shí)例相互引用,用戶可以定義在一個閉合作為無主引用捕獲。它不會允許用戶在同一時間解除分配實(shí)例。當(dāng)實(shí)例在某個時候返回一個“nil” 定義并使用弱實(shí)例的值。

復(fù)制代碼 代碼如下:

 class HTMLElement {
    let module: String
    let text: String?
   
    lazy var asHTML: () -> String = {
        [unowned self] in
        if let text = self.text {
            return "<\(self.module)>\(text)</\(self.module)>"
        } else {
            return "<\(self.module) />"
        }
    }
   
    init(module: String, text: String? = nil) {
        self.module = module
        self.text = text
    }
   
    deinit {
        println("\(module) the deinit()")
    }
}

var paragraph: HTMLElement? = HTMLElement(module: "Inside", text: "ARC Weak References")
println(paragraph!.asHTML())
paragraph = nil


當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。

<Inside>ARC Weak References</Inside>
Inside the deinit()

相關(guān)文章

  • 深入解析Swift中switch語句對case的數(shù)據(jù)類型匹配的支持

    深入解析Swift中switch語句對case的數(shù)據(jù)類型匹配的支持

    這篇文章主要介紹了Swift中switch語句對case的數(shù)據(jù)類型匹配的支持,Swift中switch...case語句支持多種數(shù)據(jù)類型的匹配判斷,十分強(qiáng)大,需要的朋友可以參考下
    2016-04-04
  • 詳解Swift的內(nèi)存管理

    詳解Swift的內(nèi)存管理

    這篇文章主要介紹了Swift的內(nèi)存管理,對內(nèi)存管理感興趣的同學(xué),可以參考下
    2021-04-04
  • Swift可選值優(yōu)化示例詳解

    Swift可選值優(yōu)化示例詳解

    這篇文章主要為大家介紹了Swift可選值優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Swift編程中的switch...case語句實(shí)例解析

    Swift編程中的switch...case語句實(shí)例解析

    這篇文章主要介紹了Swift編程中的switch...case語句實(shí)例解析,其中重點(diǎn)還是對于fallthrough關(guān)鍵字用法的講解,需要的朋友可以參考下
    2016-04-04
  • 簡單分析Swift語言的一些基本特征

    簡單分析Swift語言的一些基本特征

    這篇文章主要介紹了Swift語言的一些基本特征,本文從各語言最基礎(chǔ)的類與對象等方面來講,需要的朋友可以參考下
    2015-07-07
  • Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)

    Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)

    這篇文章主要為大家介紹了Swift之for循環(huán)的基礎(chǔ)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • swift中利用runtime交換方法的實(shí)現(xiàn)示例

    swift中利用runtime交換方法的實(shí)現(xiàn)示例

    這篇文章主要給大家介紹了關(guān)于swift中利用runtime交換方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-05-05
  • Swift實(shí)現(xiàn)監(jiān)聽鍵盤通知及一些處理詳解

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

    這篇文章主要給大家介紹了關(guān)于Swift實(shí)現(xiàn)監(jiān)聽鍵盤通知及一些處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • 淺談swift 4.0中private所發(fā)生的變化

    淺談swift 4.0中private所發(fā)生的變化

    Swift 4是蘋果計(jì)劃于2017年秋季推出的最新版本,其主要重點(diǎn)是提供與Swift 3代碼的源兼容性,并努力實(shí)現(xiàn)ABI穩(wěn)定性。下面這篇文章主要給大家介紹了關(guān)于swift 4.0中private所發(fā)生的一些變化,需要的朋友可以參考下。
    2017-12-12
  • Swift與C語言指針結(jié)合使用實(shí)例

    Swift與C語言指針結(jié)合使用實(shí)例

    這篇文章主要介紹了Swift與C語言指針結(jié)合使用實(shí)例,本文講解了用以輸入/輸出的參數(shù)指針、作為數(shù)組使用的參數(shù)指針、用作字符串參數(shù)的指針、指針參數(shù)轉(zhuǎn)換的安全性等內(nèi)容,需要的朋友可以參考下
    2015-05-05

最新評論

呈贡县| 拜泉县| 北京市| 波密县| 夏河县| 介休市| 绍兴县| 习水县| 托克逊县| 揭阳市| 祁门县| 育儿| 东乡县| 凤冈县| 科尔| 灌云县| 汉中市| 长兴县| 沈阳市| 武乡县| 太原市| 馆陶县| 天水市| 阿克| 辽阳市| 祁连县| 嘉禾县| 福建省| 延吉市| 南皮县| 香港| 永胜县| 中江县| 鹰潭市| 平和县| 大洼县| 定日县| 上高县| 酒泉市| 新泰市| 定边县|