Suche…


Allocation Performance

In Swift erfolgt die Speicherverwaltung für Sie automatisch mithilfe der automatischen Referenzzählung. (Siehe Speicherverwaltung. ) Zuweisung ist der Vorgang, bei dem ein Punkt im Speicher für ein Objekt reserviert wird. Um die Leistung eines solchen Objekts zu verstehen, ist ein gewisses Verständnis des Heapspeichers und des Stacks erforderlich. Der Heapspeicher ist ein Speicherort, an dem die meisten Objekte abgelegt werden, und Sie können sich das als Ablagefach vorstellen. Der Stack dagegen ist ein Aufrufstack von Funktionen, die zur aktuellen Ausführung geführt haben. (Daher ist eine Stack-Ablaufverfolgung eine Art Ausdruck der Funktionen auf der Aufrufliste.)

Das Zuordnen und Aufheben der Zuweisung vom Stapel ist ein sehr effizienter Vorgang, jedoch ist die Heapzuordnung im Vergleich teuer. Wenn Sie für Leistung entwerfen, sollten Sie dies berücksichtigen.

Klassen:

class MyClass {

    let myProperty: String

}

Klassen in Swift sind Referenztypen und daher passieren einige Dinge. Zunächst wird das eigentliche Objekt dem Heap zugeordnet. Dann müssen alle Verweise auf dieses Objekt dem Stapel hinzugefügt werden. Dies macht Klassen zu einem teureren Objekt für die Zuordnung.

Strukturen:

struct MyStruct {

    let myProperty: Int

}

Da Strukturen Werttypen sind und daher kopiert werden, werden sie auf dem Stack zugewiesen. Dies macht Strukturen effizienter als Klassen. Wenn Sie jedoch einen Begriff von Identität und / oder Referenzsemantik benötigen, kann Ihnen eine Struktur diese Dinge nicht bieten.

Warnung vor Strukturen mit Strings und Eigenschaften, die Klassen sind

Während Strukturen im Allgemeinen billiger sind als Klassen, sollten Sie bei Strukturen mit Eigenschaften, die Klassen sind, vorsichtig sein:

struct MyStruct {

    let myProperty: MyClass

}

Aufgrund von Referenzzählungen und anderen Faktoren ist die Leistung jetzt einer Klasse ähnlicher. Wenn mehr als eine Eigenschaft in der Struktur eine Klasse ist, können die Auswirkungen auf die Leistung sogar noch negativer sein, als wenn die Struktur stattdessen eine Klasse wäre.

Auch wenn Strings Strukturen sind, speichern sie intern ihre Zeichen auf dem Heap und sind daher teurer als die meisten Strukturen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow