Нам рекомендуется использовать struct
вместо class
в Swift.
Это потому что
- Компилятор может сделать много оптимизаций
- Экземпляры создаются в стеке, что намного более эффективно, чем вызовы
malloc
/free
.
Недостатком переменных struct
является то, что они копируются каждый раз, когда возвращаются из функции или присваиваются ей. Очевидно, что это тоже может стать узким местом.
Например. представьте себе матрицу 4x4. 16 Значения с плавающей запятой должны копироваться при каждом назначении/возврате, что составляет 1024 бита в 64-битной системе.
Один из способов избежать этого — использовать inout
при передаче переменных в функции, что в основном является способом создания указателя в Swift. Но тогда нам также не рекомендуется использовать inout
.
Итак, на мой вопрос:
Как мне обрабатывать большие неизменяемые структуры данных в Swift?
Нужно ли мне беспокоиться о создании большого struct
со многими членами?
Если да, то когда я перейду черту?