Поиск…


Производительность распределения

В Swift управление памятью выполняется автоматически для автоматического подсчета ссылок. (См. « Управление памятью» ). Распределение - это процесс резервирования места в памяти для объекта, а в Swift понимание производительности такого требует некоторого понимания кучи и стека . Куча - это место памяти, где размещается большинство объектов, и вы можете думать об этом как о хранилище. С другой стороны, стек представляет собой стек вызовов функций, которые привели к текущему исполнению. (Следовательно, трассировка стека - это своего рода распечатка функций в стеке вызовов).

Выделение и освобождение из стека является очень эффективной операцией, однако в сравнении распределение кучи является дорогостоящим. При проектировании производительности вы должны помнить об этом.

Классы:

class MyClass {

    let myProperty: String

}

Классы в Swift являются ссылочными типами, и поэтому происходит несколько вещей. Во-первых, фактический объект будет выделен в кучу. Затем любые ссылки на этот объект должны быть добавлены в стек. Это делает классы более дорогостоящим объектом для распределения.

Структуры:

struct MyStruct {

    let myProperty: Int

}

Поскольку structs являются типами значений и поэтому копируются при передаче, они выделяются в стеке. Это делает структуры более эффективными, чем классы, однако, если вам нужно понятие идентичности и / или эталонная семантика, структура не может предоставить вам эти вещи.

Предупреждение о структурах со строками и свойствами, которые являются классами

Хотя структуры, как правило, более чистые, чем классы, вы должны быть осторожны с структурами со свойствами, которые являются классами:

struct MyStruct {

    let myProperty: MyClass

}

Здесь, из-за подсчета ссылок и других факторов, производительность теперь больше похожа на класс. Кроме того, если более чем одно свойство в структуре является классом, влияние производительности может быть еще более отрицательным, чем если бы структура была классом.

Кроме того, хотя Strings являются структурами, они внутренне хранят свои символы в куче, поэтому стоят дороже, чем большинство структур.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow