分配績效

在 Swift 中,使用自動引用計數自動完成記憶體管理。 (請參閱記憶體管理 )分配是在記憶體中為物件保留一個點的過程,在 Swift 中,理解這樣做的效能需要對堆疊有所瞭解。堆是大多數物件放置的記憶體位置,你可以將其視為儲存棚。另一方面,堆疊是導致當前執行的函式呼叫堆疊。 (因此,堆疊跟蹤是呼叫堆疊上函式的一種列印輸出。)

從堆疊中分配和解除分配是非常有效的操作,但是相比之下,堆分配是昂貴的。在設計效能時,你應該牢記這一點。

類別:

class MyClass {

    let myProperty: String

}

Swift 中的類是引用型別,因此會發生一些事情。首先,將實際物件分配到堆上。然後,必須將對該物件的任何引用新增到堆疊中。這使得類成為分配的更昂貴的物件。

結構:

struct MyStruct {

    let myProperty: Int

}

因為結構是值型別,因此在傳遞時被複制,它們被分配在堆疊上。這使得結構比類更有效,但是,如果你確實需要一個身份和/或引用語義的概念,結構就無法為你提供這些東西。

關於具有字串的結構和類的屬性的警告

雖然結構通常比類更乾淨,但是應該注意具有類屬性的結構:

struct MyStruct {

    let myProperty: MyClass

}

在這裡,由於引用計數和其他因素,效能現在更類似於一個類。此外,如果 struct 中的多個屬性是一個類,那麼效能影響可能比結構是一個類而更負面。

此外,雖然字串是結構,但它們在內部將它們的字元儲存在堆上,因此比大多數結構更昂貴。