分配績效
在 Swift 中,使用自動引用計數自動完成記憶體管理。 (請參閱記憶體管理 )分配是在記憶體中為物件保留一個點的過程,在 Swift 中,理解這樣做的效能需要對堆和堆疊有所瞭解。堆是大多數物件放置的記憶體位置,你可以將其視為儲存棚。另一方面,堆疊是導致當前執行的函式呼叫堆疊。 (因此,堆疊跟蹤是呼叫堆疊上函式的一種列印輸出。)
從堆疊中分配和解除分配是非常有效的操作,但是相比之下,堆分配是昂貴的。在設計效能時,你應該牢記這一點。
類別:
class MyClass {
let myProperty: String
}
Swift 中的類是引用型別,因此會發生一些事情。首先,將實際物件分配到堆上。然後,必須將對該物件的任何引用新增到堆疊中。這使得類成為分配的更昂貴的物件。
結構:
struct MyStruct {
let myProperty: Int
}
因為結構是值型別,因此在傳遞時被複制,它們被分配在堆疊上。這使得結構比類更有效,但是,如果你確實需要一個身份和/或引用語義的概念,結構就無法為你提供這些東西。
關於具有字串的結構和類的屬性的警告
雖然結構通常比類更乾淨,但是應該注意具有類屬性的結構:
struct MyStruct {
let myProperty: MyClass
}
在這裡,由於引用計數和其他因素,效能現在更類似於一個類。此外,如果 struct 中的多個屬性是一個類,那麼效能影響可能比結構是一個類而更負面。
此外,雖然字串是結構,但它們在內部將它們的字元儲存在堆上,因此比大多數結構更昂貴。