亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift編程中用以管理內存的自動引用計數詳解

2020-03-09 17:52:47
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Swift編程中用以管理內存的自動引用計數詳解,是Swift入門學習中的基礎知識,需要的朋友可以參考下
 

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

ARC的功能

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

ARC 程序

復制代碼代碼如下:

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)


當我們使用 playground 運行上面的程序,得到以下結果。

 

swift98

ARC 強參考周期類實例

復制代碼代碼如下:

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


當我們使用 playground 運行上面的程序,得到以下結果。

 

Initializing: SwiftInitializing: ARC

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

  1. 弱引用
  2. 無主參考

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

弱引用程序

復制代碼代碼如下:

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


當我們使用 playground 運行上面的程序,得到以下結果。

 

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

無主參考程序

復制代碼代碼如下:

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


當我們使用 playground 運行上面的程序,得到以下結果。

 

ARCMarks Obtained by the student is 98

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

復制代碼代碼如下:

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())


當我們使用 playground 運行上面的程序,得到以下結果。

 

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

復制代碼代碼如下:

 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


當我們使用 playground 運行上面的程序,得到以下結果。

 

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


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人激情视频在线| 欧美午夜片在线免费观看| 国产亚洲一区二区在线| 久久久精品国产网站| 97色在线播放视频| 亚洲美女视频网站| 91网站在线看| 日韩av在线网页| www.午夜精品| 国产精品444| 川上优av一区二区线观看| 国内精品在线一区| 久久视频国产精品免费视频在线| 国产亚洲成av人片在线观看桃| 欧美日韩一区二区免费在线观看| 欧美成人午夜激情在线| 俺去亚洲欧洲欧美日韩| 一区二区欧美在线| 久久国产精品久久久久| 国产美女久久精品香蕉69| 成人欧美在线视频| 日本精品一区二区三区在线播放视频| 中文字幕免费国产精品| 欧美国产日韩免费| 国产在线视频91| 欧美另类69精品久久久久9999| 日韩69视频在线观看| 尤物精品国产第一福利三区| 日韩在线观看你懂的| 亚洲精选中文字幕| 亚洲国产毛片完整版| 性金发美女69hd大尺寸| 国产91精品网站| 日韩中文字幕在线视频| 国产中文日韩欧美| 亚洲国产成人91精品| 亚洲色图综合久久| 久久免费视频在线| 亚洲精品天天看| 成人午夜激情免费视频| 欧美午夜精品在线| 一区二区三区四区在线观看视频| 一区二区三区高清国产| 国产成人在线亚洲欧美| 成人午夜黄色影院| 国产欧美日韩精品丝袜高跟鞋| 欧美日韩一区免费| 欧美在线性爱视频| 久久久久久久久久亚洲| 日韩欧美国产激情| 亚洲精品久久久久中文字幕欢迎你| 欧美成人黑人xx视频免费观看| 欧美成人剧情片在线观看| 久久免费视频观看| 久久影院中文字幕| 精品中文字幕久久久久久| 亚洲大胆人体av| 91免费综合在线| 亚洲国产精品悠悠久久琪琪| 亚洲天堂网在线观看| 最新91在线视频| 91精品久久久久久久久中文字幕| 国自产精品手机在线观看视频| 精品久久久久人成| xxx一区二区| 一本大道香蕉久在线播放29| 久久久久久久亚洲精品| 国产精品678| 97人人模人人爽人人喊中文字| 亚洲va欧美va国产综合久久| 欧美视频中文字幕在线| 亚洲欧洲免费视频| 久久这里有精品视频| 国产欧美在线视频| 亚洲剧情一区二区| 国外成人在线播放| 国产一区欧美二区三区| 国产精品美女午夜av| 亚洲欧美国产高清va在线播| 日韩av手机在线| 日韩电影中文 亚洲精品乱码| 国产成人一区二| 91色在线视频| 国外日韩电影在线观看| 91中文字幕在线| 亚洲精品小视频| 亚洲精品第一页| 亚洲中国色老太| 久久成人精品电影| 久久久久久久久久av| 精品久久久久久久久国产字幕| 欧美午夜视频一区二区| 国产精品h在线观看| 亚洲激情成人网| 午夜精品一区二区三区在线| 亚洲免费成人av电影| 日韩在线观看高清| 国产视频精品xxxx| 久久6免费高清热精品| 日韩中文字幕视频| 亚洲一区二区中文字幕| 欧美成人黄色小视频| 疯狂蹂躏欧美一区二区精品| 欧美在线观看网站| 精品久久久久久亚洲国产300| 国产男女猛烈无遮挡91| 欧美性极品xxxx做受| 久久精品男人天堂| 国产91久久婷婷一区二区| 日韩激情av在线免费观看| 日韩av中文字幕在线免费观看| 欧美在线观看www| 久久久人成影片一区二区三区观看| 亚洲国产成人久久| 亚洲国产婷婷香蕉久久久久久| 色噜噜狠狠色综合网图区| 日韩av免费在线观看| 国产精品影片在线观看| 精品国产精品自拍| 精品在线欧美视频| 久久久久久久色| 亚洲欧美综合区自拍另类| 精品国产成人av| 91亚洲永久免费精品| 91精品久久久久久久久久久| 国产视频丨精品|在线观看| 国产91色在线| 91免费精品国偷自产在线| 亚洲精品中文字幕av| 色伦专区97中文字幕| 奇米4444一区二区三区| 中文字幕综合在线| 亚洲va欧美va在线观看| 国产精品丝袜一区二区三区| 亚洲欧美在线一区| 国产精品久久久久久久av大片| 91国产美女视频| 日韩视频免费大全中文字幕| 国产精品久久久久久久久免费看| 国产精品视频区| 成人有码在线播放| 欧美激情久久久| 欧美疯狂做受xxxx高潮| 欧美另类99xxxxx| 一区国产精品视频| 日韩男女性生活视频| 日韩成人小视频| 国产成人精品视频| 日韩有码视频在线| 欧美日韩国产成人高清视频| 国产91色在线|免| 57pao精品| 九色精品免费永久在线| 奇米成人av国产一区二区三区| 97精品久久久| 日韩大陆欧美高清视频区| 欧美激情亚洲自拍| 国产成人精品综合久久久| 日韩不卡中文字幕| 亚洲午夜色婷婷在线| 欧美在线视频播放| 久久视频免费在线播放| 久久久久久久久久久免费| 国产精品女主播|