Что означает `выделенный init с копией протокола`? - PullRequest
0 голосов
/ 10 октября 2018

Я написал очень простой кусок кода в 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 метод для Array просто создает массив случайных Ints)

Затем,Я запустил этот код в Instruments и получил следующие результаты:

results from Instruments

Как видите, почти половина времени занимает запись под названием outlined init with copy of MultiplyByTwoProtocol.Кто-нибудь знает, что это такое?

Спасибо за помощь.

1 Ответ

0 голосов
/ 09 апреля 2019

Я только что натолкнулся на outlined init with copy of ... как вершину трассировки стека для сбоев, исходящих из приложения, созданного с конфигурацией выпуска.Я обнаружил, что отключение настроек оптимизации компилятора предотвратит сбой.В конечном итоге я также нашел эквивалентный синтаксис для кода, на который указывает трассировка стека, что оптимизатор не вызывал сбоев и мог оставить сбой включенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...