568 Stimmen

Warum Struktur über Klasse wählen?

Beim Experimentieren mit Swift, kommend aus einer Java-Hintergrund, warum möchtest du eine Struktur anstelle einer Klasse wählen? Es scheint, dass sie dasselbe sind, wobei eine Struktur weniger Funktionalität bietet. Warum sollte man sie dann wählen?

13 Stimmen

Strukturen werden immer kopiert, wenn sie in Ihrem Code weitergereicht werden und verwenden kein Referenzzählen. Quelle: developer.apple.com/library/prerelease/ios/documentation/swi‌​ft/…

4 Stimmen

Ich würde sagen, dass structs besser geeignet sind, um Daten zu speichern, nicht Logik. Um es in Java-Begriffen auszudrücken, stelle dir structs als "Value Objects" vor.

6 Stimmen

Ich bin erstaunt, dass im gesamten Gespräch nicht direkt auf copy-on-write oder lazy copy verwiesen wird. Eventuelle Bedenken in Bezug auf die Leistung beim Strukturkopieren sind aufgrund dieses Designs größtenteils obsolet.

-1voto

Tapash Mollick Punkte 135

Da Structs Werttypen sind und du den Speicher sehr einfach erstellen kannst, der in den Stapel gelegt wird. Structs können leicht zugänglich sein und nach dem Scope der Arbeit wird er leicht aus dem Stapelspeicher dealloziert, indem er sich vom oberen Teil des Stapels entfernt. Andererseits ist Klasse ein Verweistyp, der im Heap gespeichert wird, und Änderungen an einem Klassenobjekt werden sich auf ein anderes Objekt auswirken, da sie eng gekoppelt sind und Verweistyp sind. Alle Mitglieder einer Struktur sind öffentlich, während alle Mitglieder einer Klasse privat sind.

Der Nachteil von Struct ist, dass es nicht vererbt werden kann.

-1voto

Kumar Lav Punkte 262

Strukturen und Klassen sind gute Optionen zur Speicherung von Daten und Modellierung von Verhalten in Ihren Apps, aber ihre Ähnlichkeiten können es schwierig machen, eine über die andere zu wählen.

Berücksichtigen Sie die folgenden Empfehlungen, um zu entscheiden, welche Option Sinn macht, wenn Sie einen neuen Datentyp zu Ihrer App hinzufügen.

  • Verwenden Sie standardmäßig Strukturen.
  • Verwenden Sie Klassen, wenn Sie die interoperabilität mit Objective-C benötigen.
  • Verwenden Sie Klassen, wenn Sie die Identität der Daten steuern müssen, die Sie modellieren.
  • Verwenden Sie Strukturen zusammen mit Protokollen, um Verhalten durch gemeinsame Implementierungen zu übernehmen.

Quelle- Apple Dokumentation

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X