Was sind die Laufzeitkosten von Swift's Casts?

9

Welche unterschiedlichen Laufzeitkosten entstehen bei den folgenden Typumwandlungen?

  1. Numerische Konstantenform , z. B .:

    %Vor%

    Ich könnte mir vorstellen, dass dies keine Laufzeitkosten verursacht.

  2. Numerische Umsetzung des Laufzeitwerts , z. B .:

    %Vor%

    Ich könnte mir vorstellen, dass dies extrem geringe Laufzeitkosten hat.

  3. Upcast , z. B.:

    %Vor%

    Ich erwarte, dass dies keine Laufzeitkosten verursacht.

  4. Failable Downcast , z. B .:

    %Vor%

    Ich erwarte, dass dies eine Laufzeit kostet, die proportional zur Anzahl der Klassen in der Hierarchie des dynamischen Typs anyObj ist.

  5. Erzwungener Downcast , z. B.:

    %Vor%

    Vielleicht sind die Kosten für einen erzwungenen Downcast etwas niedriger?

  6. Erzwungenes Downcast der Sammlung , z. B.:

    %Vor%

    Was passiert hier - besonders wenn dates von NSArray kommt? Sind die Laufzeitkosten dieser Besetzung proportional zur Anzahl ihrer Elemente? Was passiert, wenn ich in einen komplexeren Sammlertyp wie [String: [String: [Int]]] umwandelt - wird die gesamte Sammlung durchlaufen, um sicherzustellen, dass alle Elemente und Unterelemente dieser Besetzung entsprechen?

Sind meine Behauptungen für jeden der ersten vier Fälle wahr?

    
Jean-Philippe Pellet 19.02.2015, 09:40
quelle

1 Antwort

12
  • Es ist O (1) (fast 0), wenn es offensichtlich gießbar ist (wie numerisches Casting und Upcasting): Fall 1, 2, 3.

  • Für andere Nicht-Sammel-Castings ist es offensichtlich O (1): Fall 4, 5.

  • Für Sammlungsumbuchungen:

    • as? ist O (n), weil die Überprüfung des Elementtyps eifrig ausgeführt wird.
    • Native erzwungenes Downcasting ist O (1), weil die Überprüfung des Elementtyps zurückgestellt wird: case 6.
    • Überbrückter erzwungener Downcasting ( NSArray as! [NSDate] ) ist O (n), weil die Elementtypüberprüfung eifrig durchgeführt wird.
    • Verschachtelte Sammlungen werden rekursiv umgewandelt, sodass Sie die obigen Regeln nur rekursiv anwenden.

Quellen:

  1. Ссылка
  2. Ссылка
  3. Ссылка
an0 26.02.2016, 00:15
quelle