Zoeken…


Toewijzingsprestaties

In Swift wordt geheugenbeheer automatisch voor u gedaan met behulp van automatische referentietelling. (Zie Geheugenbeheer ) Toewijzing is het proces waarbij een plek in het geheugen wordt gereserveerd voor een object, en in Swift-begrip vereist de prestatie hiervan enig begrip van de heap en de stapel . De heap is een geheugenlocatie waar de meeste objecten worden geplaatst, en je kunt het beschouwen als een opslagloods. De stapel daarentegen is een oproepstapel met functies die hebben geleid tot de huidige uitvoering. (Daarom is een stack-trace een soort afdruk van de functies op de call-stack.)

Toewijzen en dealloceren van de stapel is een zeer efficiënte operatie, maar in vergelijking is heap-toewijzing kostbaar. Bij het ontwerpen voor prestaties moet u hier rekening mee houden.

Klassen:

class MyClass {

    let myProperty: String

}

Klassen in Swift zijn referentietypes en daarom gebeuren er verschillende dingen. Eerst wordt het werkelijke object toegewezen aan de heap. Vervolgens moeten alle verwijzingen naar dat object aan de stapel worden toegevoegd. Dit maakt klassen een duurder object voor toewijzing.

structs:

struct MyStruct {

    let myProperty: Int

}

Omdat structs waardetypes zijn en daarom worden gekopieerd wanneer ze worden doorgegeven, worden ze toegewezen aan de stapel. Dit maakt structs efficiënter dan klassen, maar als je een idee van identiteit en / of referentie-semantiek nodig hebt, kan een struct je die dingen niet bieden.

Waarschuwing voor structs met tekenreeksen en eigenschappen die klassen zijn

Hoewel structs over het algemeen cheeper zijn dan klassen, moet je voorzichtig zijn met structs met eigenschappen die klassen zijn:

struct MyStruct {

    let myProperty: MyClass

}

Vanwege referentietellingen en andere factoren lijkt de prestatie nu meer op die van een klasse. Verder, als meer dan één eigenschap in de struct een klasse is, kan de impact op de prestaties nog negatiever zijn dan als de struct in plaats daarvan een klasse zou zijn.

Hoewel Strings structs zijn, slaan ze hun personages intern op in de heap, dus zijn ze duurder dan de meeste structs.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow