Jea*_*let 10 casting overhead time-complexity swift
以下类型转换会产生哪些不同的运行时成本?
恒定的数字转换,例如:
let f = 0.1 as CGFloat
Run Code Online (Sandbox Code Playgroud)
我想这个运行时成本为零.
运行时值的数字转换,例如:
let f = someDoubleValue as CGFloat
Run Code Online (Sandbox Code Playgroud)
我想这会有非常小的运行时成本.
向上,例如:
let dict: [String: Int] = ...
let anyObj = dict as AnyObject
Run Code Online (Sandbox Code Playgroud)
我希望这个运行时成本为零.
可用的Downcast,例如:
let anyObj: AnyObject = ...
if let str = anyObj as? String { ... }
Run Code Online (Sandbox Code Playgroud)
我希望它的运行时成本与动态类型的层次结构中的类数成比例anyObj.
强制向下倾斜,例如:
let anyObj: AnyObject = ...
let str = anyObj as! String
Run Code Online (Sandbox Code Playgroud)
也许强迫低价的成本略低?
强迫收集下来,例如:
let dates: [AnyObject] = ...
for date in dates as! [NSDate] { ... }
Run Code Online (Sandbox Code Playgroud)
这里发生了什么 - 尤其dates是来自一个NSArray?此演员的运行时成本是否与其元素的数量成比例?如果我转换为更复杂的集合类型[String: [String: [Int]]]- 如果整个集合遍历以确保其所有元素和子元素符合此演员表,该怎么办?
对于前四种情况中的每一种情况,我的断言都是真的吗?
an0*_*an0 17
如果它显然是可铸造的(如数字铸造和向上铸造),则为O(1)(几乎为0):情况1,2,3.
对于其他非收集铸件,显然是O(1):情况4,5.
对于收集低估:
as? 是O(n),因为热切地执行元素类型检查.NSArray as! [NSDate])是O(n)因为要素元素类型检查是急切执行的.资料来源:
| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |