欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳談swift內存管理中的引用計數

 更新時間:2017年09月05日 09:07:31   作者:冬日降臨  
下面小編就為大家?guī)硪黄斦剆wift內存管理中的引用計數。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在swift中,每一個對象都有生命周期,當生命周期結束會調用deinit()函數進行釋放內存空間。

觀察這一段代碼:

class Person{
 
 var name: String
 var pet: Pet?
 
 init(name: String){
  self.name = name
  print("Person", name, "is initialized")
 }
 
 init(name: String, petName: String){
  self.name = name
  self.pet = Pet(name: petName)
  print("Person", name, "is initialized")
 }
 
 deinit{
  print("Person", name, "is deinitialized!")
 }
}

class Pet{
 
 var name: String
 init(name: String){
  self.name = name;
  print("Pet", name, "is initialized")
 }
 
 deinit{
  print("Pet", name, "is deinitialized!")
 }
}

這段代碼創(chuàng)建了兩個類,分別是Person類和Pet類,每個類中都有init方法進行創(chuàng)建對象和deinit方法來釋放內存空間,其中Person類中有兩個init方法,分別對應著是否包含Pet類的名稱。

當我們調用這兩個方法:

var snow: Person? = Person(name: "snow", petName: "wolf")
snow = nil

兩步的執(zhí)行結果是:

Pet wolf is initialized
Person snow is initialized
Person snow is deinitialized!
Pet wolf is deinitialized!

會發(fā)現在創(chuàng)建snow這個對象的時候調用的是第二個init方法,在這個方法中會創(chuàng)建一個新的Pet對象,因此會首先打印出Pet wolf is initialized然后是Person snow is initialized。當對snow對象進行內存釋放的時候,將nil賦給這個對象,那么會釋放snow這個內存空間,同時也會釋放wolf這個內存空間。

但是如果我們調用第一種init方法的時候我們會發(fā)現:

var snow: Person? = Person(name: "snow")

var wolf: Pet? = Pet(name: "wolf")
snow?.pet = wolf

snow = nil
wolf = nil

我們首先創(chuàng)建了一個snow對象,之后又創(chuàng)建了一個wolf對象,然后將wolf添加到snow對象中去,但是當我們對這snow這個對象進行內存釋放的時候會發(fā)現:

Person snow is initialized
Pet wolf is initialized
Person snow is deinitialized!

僅僅只有snow的內存空間被釋放了,但是wolf的內存空間并沒有被釋放,這里就和swift內存管理中的引用計數有關了:

當我們創(chuàng)建了snow這個對象之后,我們就為它開辟了一個內存空間,命名為a,這時候snow這個對象引用了這片內存空間,這片內存空間的引用計數就是1,

同樣地當我們創(chuàng)建了wolf這個對象之后,我們就為它開辟了一個內存空間,命名為b,這時候wolf這個對象引用了這片內存空間,這片內存空間的引用計數就是1,

當我們將snow?.pet = wolf之后,那么snow中的一個屬性也指向了創(chuàng)建wolf這個對象的內存空間,那么這篇內存空間的引用計數就是2.

當我們對snow = nil進行內存空間的釋放,那么內存空間a的引用計數就為0了,同時內存空間b的引用計數就為1了。

當系統(tǒng)發(fā)現一篇內存空間的引用計數為0,那么,系統(tǒng)就會釋放這片內存空間,此時內存空間a就被釋放了。

但是內存空間b的引用計數為1,系統(tǒng)不會進行自動的內存釋放。只有當我們進行:

wolf = nil

操作之后,這片內存空間b才會被釋放。

同樣地對于這樣代碼:

import UIKit

class Person{
 
 var name: String
 
 init(name: String){
  self.name = name
  print("Person", name, "is initialized")
 }
 
 deinit{
  print("Person", name, "is being deinitialized!")
 }
}

var person1: Person? = Person(name: "liuyubobobo")
var person2: Person? = person1
var person3: Person? = person1

那么person1的內存空間的引用計數為3,如果釋放這片內存空間的話,需要將三個對象都為nil

如果僅僅是將person1=nil的話,并不會釋放這一片內存空間。

以上這篇詳談swift內存管理中的引用計數就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • swift 字符串String的使用方法

    swift 字符串String的使用方法

    這篇文章主要介紹了swift 字符串String的使用方法的相關資料,需要的朋友可以參考下
    2017-06-06
  • Swift語言中字符串相關的基本概念解析

    Swift語言中字符串相關的基本概念解析

    這篇文章主要介紹了Swift語言中字符串相關的基本概念解析,是Swift入門學習中的基礎知識,需要的朋友可以參考下
    2015-11-11
  • Swift3遷移至Swift4可能遇到的問題小結

    Swift3遷移至Swift4可能遇到的問題小結

    每當看到新的編程語言我總是會有相當大的興趣,所以下面這篇文章主要給大家介紹了關于Swift3遷移至Swift4可能遇到的問題,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起學習學習吧
    2018-06-06
  • Swift繪制漸變色的方法

    Swift繪制漸變色的方法

    這篇文章主要為大家詳細介紹了Swift繪制漸變色的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Compose聲明式代碼語法對比React?Flutter?SwiftUI

    Compose聲明式代碼語法對比React?Flutter?SwiftUI

    這篇文章主要為大家介紹了Compose聲明式代碼語法對比React?Flutter?SwiftUI來解釋為什么說?Compose?的聲明式代碼最簡潔,有需要的朋友可以借鑒參考下
    2022-08-08
  • 詳解Swift中的函數及函數閉包使用

    詳解Swift中的函數及函數閉包使用

    Swift的函數在創(chuàng)建和調用時非常簡潔,在編寫具有閉包特性的函數時同樣也相當方便,以下我們就來詳解Swift中的函數及函數閉包使用:
    2016-06-06
  • Swift 使用 Observe 監(jiān)測頁面滾動的實現方法

    Swift 使用 Observe 監(jiān)測頁面滾動的實現方法

    這篇文章主要介紹了Swift 使用 Observe 監(jiān)測頁面滾動的實現方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Swift實現文件壓縮和解壓示例代碼

    Swift實現文件壓縮和解壓示例代碼

    本篇文章主要介紹了Swift實現文件壓縮和解壓示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Swift并發(fā)系統(tǒng)并行運行多個任務使用詳解

    Swift并發(fā)系統(tǒng)并行運行多個任務使用詳解

    這篇文章主要為大家介紹了Swift并發(fā)系統(tǒng)并行運行多個任務使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Swift心得筆記之函數

    Swift心得筆記之函數

    函數是執(zhí)行特定任務的代碼自包含塊。通過給定一個函數名稱標識它是什么,并在需要的時候使用該名稱來調用函數以執(zhí)行任務。今天我們就來探討下swift中的函數問題。
    2015-04-04

最新評論