Swift Language
Спектакль
Поиск…
Производительность распределения
В Swift управление памятью выполняется автоматически для автоматического подсчета ссылок. (См. « Управление памятью» ). Распределение - это процесс резервирования места в памяти для объекта, а в Swift понимание производительности такого требует некоторого понимания кучи и стека . Куча - это место памяти, где размещается большинство объектов, и вы можете думать об этом как о хранилище. С другой стороны, стек представляет собой стек вызовов функций, которые привели к текущему исполнению. (Следовательно, трассировка стека - это своего рода распечатка функций в стеке вызовов).
Выделение и освобождение из стека является очень эффективной операцией, однако в сравнении распределение кучи является дорогостоящим. При проектировании производительности вы должны помнить об этом.
Классы:
class MyClass {
let myProperty: String
}
Классы в Swift являются ссылочными типами, и поэтому происходит несколько вещей. Во-первых, фактический объект будет выделен в кучу. Затем любые ссылки на этот объект должны быть добавлены в стек. Это делает классы более дорогостоящим объектом для распределения.
Структуры:
struct MyStruct {
let myProperty: Int
}
Поскольку structs являются типами значений и поэтому копируются при передаче, они выделяются в стеке. Это делает структуры более эффективными, чем классы, однако, если вам нужно понятие идентичности и / или эталонная семантика, структура не может предоставить вам эти вещи.
Предупреждение о структурах со строками и свойствами, которые являются классами
Хотя структуры, как правило, более чистые, чем классы, вы должны быть осторожны с структурами со свойствами, которые являются классами:
struct MyStruct {
let myProperty: MyClass
}
Здесь, из-за подсчета ссылок и других факторов, производительность теперь больше похожа на класс. Кроме того, если более чем одно свойство в структуре является классом, влияние производительности может быть еще более отрицательным, чем если бы структура была классом.
Кроме того, хотя Strings являются структурами, они внутренне хранят свои символы в куче, поэтому стоят дороже, чем большинство структур.