Swift класс, метод и свойства ограничения - PullRequest
0 голосов
/ 11 ноября 2018

Я ищу рабочий компромисс между удобочитаемостью / удобством использования и улучшением производительности через ограничения кода.

В соответствии с этим вопросом и связанным документом Apple представляется очень важным использовать ограничения кода как можно чаще.

С другой стороны, я никогда не видел пример, где реализованы все ограничения кода, и я бы никогда не попытался кодировать так:

    final internal class TestClass {
        final private var result: String = "Result"
        ...

        final internal func TestMethod(result: String) -> String {
            ...
        }
    }

Так есть ли общепринятый и "рабочий" компромисс?

EDIT

Другими словами, если улучшение производительности, вызванное ограничениями кода, такими как final и private, столь же огромно, как упомянуто в прилагаемой статье, почему мы видим это очень редко? И почему это не поведение по умолчанию?

1 Ответ

0 голосов
/ 12 ноября 2018

Связанный ответ неправильно описывает связанный пост в блоге. Если вы используете Оптимизацию всего модуля (которую вы всегда должны использовать в режиме выпуска), вам обычно не нужно заранее добавлять final или private по соображениям производительности. Компилятор выяснит, когда их можно вставить. Вы должны использовать final и private, чтобы выразить свои намерения другим программистам (и себе), а не оптимизатору.

Однако, если включена Оптимизация всего модуля, весь модуль будет скомпилирован одновременно. Это позволяет компилятору делать выводы обо всем модуле вместе и выводить final для объявлений с внутренними, если нет видимых переопределений.

...