我在Swift中编写了非常简单的代码:
protocol MultiplyByTwoProtocol {
func multiply() -> Int
}
class MultiplyByTwoClass: MultiplyByTwoProtocol {
private let n: Int
init(n: Int) { self.n = n }
func multiply() -> Int { return 2 * n }
}
class DynamicDispatchSwift {
private let items: [MultiplyByTwoProtocol]
init(n: Int) {
self.items = Array<Int>.generate(size: n).map(MultiplyByTwoClass.init)
}
func run() {
items.forEach { input in
_ = input.multiply()
}
}
}
(generate
的btw Array
方法只会创建一个随机Ints
的数组)
然后,我在Instruments中运行该代码,并得到以下结果:
如您所见,几乎一半的时间需要输入名为outlined init with copy of MultiplyByTwoProtocol
的条目。有人知道这是什么吗?
感谢您的帮助。
答案 0 :(得分:0)
我刚遇到outlined init with copy of ...
作为堆栈跟踪的顶部,该崩溃跟踪来自使用发布配置构建的应用程序导致的崩溃。我发现关闭编译器优化设置可以防止崩溃。最终,我还为堆栈跟踪指出的代码找到了等效语法,该优化器不会导致崩溃,并且能够使崩溃继续进行。