Swift Language
Występ
Szukaj…
Wydajność alokacji
W Swift zarządzanie pamięcią odbywa się automatycznie za pomocą automatycznego zliczania referencji. (Zobacz Zarządzanie pamięcią ) Przydział jest procesem rezerwowania miejsca w pamięci dla obiektu, aw szybkim zrozumieniu jego działanie wymaga pewnego zrozumienia stosu i stosu . Sterty to miejsce pamięci, w którym umieszcza się większość obiektów, i możesz myśleć o tym jak o szopie. Z drugiej strony stos jest zestawem wywołań funkcji, które doprowadziły do bieżącego wykonania. (Dlatego ślad stosu jest rodzajem wydruku funkcji na stosie wywołań.)
Przydzielanie i zwalnianie ze stosu jest bardzo wydajną operacją, jednak w porównaniu przydzielanie sterty jest kosztowne. Podczas projektowania wydajności należy o tym pamiętać.
Klasy:
class MyClass {
let myProperty: String
}
Klasy w Swift są typami referencyjnymi i dlatego dzieje się kilka rzeczy. Po pierwsze, rzeczywisty obiekt zostanie przydzielony do sterty. Następnie wszelkie stosunki do tego obiektu należy dodać do stosu. To sprawia, że klasy są droższym obiektem do alokacji.
Struktury:
struct MyStruct {
let myProperty: Int
}
Ponieważ struktury są typami wartości i dlatego są kopiowane, gdy są przekazywane, są one przydzielane na stosie. To sprawia, że struktury są bardziej wydajne niż klasy, jednak jeśli potrzebujesz pojęcia tożsamości i / lub semantyki odniesienia, struct nie może zapewnić ci takich rzeczy.
Ostrzeżenie o strukturach zawierających ciągi i właściwości, które są klasami
Podczas gdy struktury są generalnie tańsze niż klasy, należy zachować ostrożność w przypadku struktur o właściwościach, które są klasami:
struct MyStruct {
let myProperty: MyClass
}
Tutaj, z powodu liczenia referencji i innych czynników, wydajność jest teraz bardziej podobna do klasy. Ponadto, jeśli więcej niż jedna właściwość w strukturze jest klasą, wpływ na wydajność może być nawet bardziej negatywny niż w przypadku struktury zamiast.
Ponadto, mimo że ciągi są strukturami, wewnętrznie przechowują swoje postacie na stercie, więc są droższe niż większość struktur.