“带有协议副本的初始化init”是什么意思?

时间:2018-10-10 06:38:34

标签: swift

我在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中运行该代码,并得到以下结果:

results from Instruments

如您所见,几乎一半的时间需要输入名为outlined init with copy of MultiplyByTwoProtocol的条目。有人知道这是什么吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我刚遇到outlined init with copy of ...作为堆栈跟踪的顶部,该崩溃跟踪来自使用发布配置构建的应用程序导致的崩溃。我发现关闭编译器优化设置可以防止崩溃。最终,我还为堆栈跟踪指出的代码找到了等效语法,该优化器不会导致崩溃,并且能够使崩溃继续进行。