Aşağıdaki tip kadrolardan kaynaklanan farklı çalışma zamanı maliyetleri nelerdir? Sabit aitSwift'in kadrolarının çalışma zamanı maliyeti nedir?
Sayısal döküm, ör .:
let f = 0.1 as CGFloat
Ben bu sıfır çalışma zamanı maliyetine sahip hayal ediyorum. zamanı değeriyle, ör .:
let f = someDoubleValue as CGFloat
ait
Sayısal dökme Bu son derece küçük çalışma zamanı maliyetine sahip hayal ediyorum.
hava bacası, ör .:
let dict: [String: Int] = ... let anyObj = dict as AnyObject
Ben bu sıfır çalışma zamanı maliyeti beklersiniz.
Failable Hüzünlü, ör .:
let anyObj: AnyObject = ... if let str = anyObj as? String { ... }
Bu
anyObj
dinamik tip hiyerarşisinde sınıflarının sayısı ile orantılı bir çalışma zamanı maliyeti beklersiniz. Hüzünlü Zorla, ör .:
Belki zorla downCast için maliyet biraz daha düşüktür?let anyObj: AnyObject = ... let str = anyObj as! String
toplanması ait mahzun Zorla ör .:
let dates: [AnyObject] = ... for date in dates as! [NSDate] { ... }
Burada yapılan budur -
dates
birNSArray
itibaren söz konusu olduğunda? Çalışma zamanı maliyeti, öğelerinin sayısıyla orantılı mı?[String: [String: [Int]]]
gibi daha karmaşık bir koleksiyon türüne dönüştürürsem, tüm öğeleri ve alt öğelerinin bu yayınla uyumlu olduğundan emin olmak için tüm koleksiyonun geçişi var mı?
İlk dört vakanın her biri için, benim iddialarım doğru mu? örnek 1, 2 o, diğer non-toplama dökümler için 3.
: bu (sayısal döküm ve upcasting gibi) açıkça dökümü yapılabilir ise,
Ben senin birçok sorunun çok fazla olası ve doğru cevaplar vardır sanırım. Örneğin. hayır. 2: bir optimizer, 'f''in nasıl kullanıldığını algılayabilir ve eğer makine mimarisi buna uyuyorsa, 'someDoubleValue' doğrudan' Double' olarak kullanabilirken, diğer durumlarda bu değeri bir miktar daha fazla belleğe kopyalamalıdır. Hafızaya ihtiyaç duyacağı için, tüm kayıtlarda tutulabilir. Bu gibi durumlarda performans söz konusu ise: bir referans noktası oluşturun. –
Anladığım kadarıyla, # 3 gerçekten güncel bir örnek değildir, çünkü hızlı sözlük bir yapıdır ve AnyObject'e "dönüştürdüğünüzde" hızlı bir şekilde gerçekten NSDictionary oluşturur. Bu Int -> NSNumber, String -> NSString ve diğerleri için aynı olmalıdır. –