Welche unterschiedlichen Laufzeitkosten entstehen bei den folgenden Typumwandlungen?
Numerische Konstantenform , z. B .:
%Vor%Ich könnte mir vorstellen, dass dies keine Laufzeitkosten verursacht.
Numerische Umsetzung des Laufzeitwerts , z. B .:
%Vor%Ich könnte mir vorstellen, dass dies extrem geringe Laufzeitkosten hat.
Upcast , z. B.:
%Vor%Ich erwarte, dass dies keine Laufzeitkosten verursacht.
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.
Erzwungener Downcast , z. B.:
%Vor%Vielleicht sind die Kosten für einen erzwungenen Downcast etwas niedriger?
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?
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. NSArray as! [NSDate]
) ist O (n), weil die Elementtypüberprüfung eifrig durchgeführt wird. Quellen:
Tags und Links swift time-complexity casting overhead