Swift中的Class物件資源釋放

2021-09-28 21:45:41 字數 1115 閱讀 6115

swift4+中對class的引用即為引用中,必須把所有的引用全部釋放才會完全釋放

如下例子中,reference1 初始化的person物件,然後將reference1賦值給reference2,reference3。此時三個宣告物件引用同乙個person的記憶體位址及資料,當釋放reference1時,person物件並沒有呼叫析構造方法deinit,故person的記憶體並未被釋放,繼而再釋放reference2,依舊如reference1並未釋放記憶體,當釋放reference3時,此時析構造方法deinit方法被執行,說明person被完全釋放。

class person

deinit

}// 值會被自動初始化為nil,目前還不會引用到person類的例項

var reference1: person?

var reference2: person?

var reference3: person?

// 建立person類的新例項

reference1 = person(name: "w3cschool")

//賦值給其他兩個變數,該例項又會多出兩個強引用

reference2 = reference1

reference3 = reference1

print("before:\(reference1!)")

//斷開第乙個強引用

reference1 = nil

if(reference1 != nil)

print("before:\(reference2!)")

//斷開第二個強引用

reference2 = nil

if(reference2 != nil)

print("before:\(reference3!)")

//斷開第三個強引用,並呼叫析構函式

reference3 = nil

if(reference3 != nil)

輸出列印:

w3cschool 開始初始化

before:main.person

before:main.person

before:main.person

w3cschool 被析構

Swift中 Class和Struct的區別

1.記憶體管理方式不一樣,類引用型別,分配在堆上。結構體值型別,分配在棧上。2.類,有析構。結構體不能有析構,playground中測試直接卡死。3.結構體建構函式,會自動生成帶引數的構造器。類不會對有初始化賦值的屬性,生成帶引數的構造器。2.類有繼承特性,結構體沒有繼承特性,自然也不存在對成員屬性...

Swift中Class和Struct異同

swift 中類和結構體有很多共同點。共同處在於 與結構體相比,類還有如下的附加功能 tip 類的物件是引用型別,而結構體是值型別。所以類的賦值是傳遞引用,結構體則是copy傳值,不是使用引用計數。類和結構體有著類似的定義方式。我們通過關鍵字class和struct來分別表示類和結構體,並在一對大括...

swift中物件導向的過載

import uikit 在swift中 所有的建構函式都叫 init 函式的過載 函式名相同,但是函式的引數型別 或者函式的引數的個數不同就形成了過載 過載的意義 1.物件導向最重要的特徵之一 2.簡化程式設計師的記憶 3.為了讓程式開發更加的簡介 和易於維護 注意 過載 和 重寫 不要結合在一起...