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.為了讓程式開發更加的簡介 和易於維護 注意 過載 和 重寫 不要結合在一起...