Где объект типа значения хранится в swift?

Вопрос:

Я объявил объект Array, например:

let data = ["foo", "bar"]

Тип массива в swift – это тип значения, где он хранится? кучу или стек?

Я думаю, он хранится в куче, но как получить к нему доступ?

И соответствует ли это правилу ARC, когда оно будет выпущено?

Можете ли вы дать мне графику памяти объекта?

Лучший ответ:

В Swift или другом языке по умолчанию тип значения хранится в Stack, а ссылочный тип хранится в куче.

Если значение является частью ссылочного типа, то оно хранится в куче.

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

В вашем примере: данные экземпляра Array будут храниться в стеке приложения, в то время как его элементы могут быть сохранены в куче, в зависимости от элемента используется ссылочный тип или значение.

Ответ №1

Учитывая пустой массив:

let data = Array<Any>()

Тип массива в swift – это тип значения, где он хранится? кучу или стек?

Это постоянный пустой массив, поэтому он нигде не хранится. Буквально нигде. Если в нем были какие-то элементы, ящики для них будут храниться в стеке. Содержимое этих ящиков может храниться в стеке или в куче в зависимости от размера. Если бы у него было больше элементов, ящики также были бы сохранены в куче.

И соответствует ли это правилу ARC, когда оно будет выпущено?

Типы значений уничтожаются, когда их референт выходит за рамки, поэтому всякий раз, когда data покидают область действия. ARC здесь не имеет отношения. Тем не менее, если есть другая ссылка на резервное хранилище (heap), то это хранилище не может быть уничтожено до тех пор, пока ARC не будет полностью релевантным (но полностью внутренним, поэтому не связано с data).

Можете ли вы дать мне графику памяти объекта?

В приведенном случае графикой памяти объекта является:



Это. Нет памяти. Но если вы поместите вещи в это, то это будет дико зависеть от того, что вы положили в него.

Я знаю, что я невероятно легкомыслен. Это специально. Ответ “зависит от этого, а также, в большинстве случаев, вам все равно, и во всех случаях это внутренняя деталь реализации, которая не обещана и может измениться с момента выпуска до выпуска”.

Время, когда вы заботитесь, – это когда есть проблема с производительностью, а затем вам очень много. К сожалению, Свифт почти не дает никаких обещаний. Тем не менее, у нас очень много информации из команды Swift. Лучший ресурс – это понимание Swift Performance от WWDC 2016, которое объясняет макет внутренней памяти. Скорее всего, это не так, как вы ожидаете, и это невероятно зависит от специфики массива. Учитывая массив, о котором вы спросили, ответ “нигде, он пуст”.

Оцените статью
TechArks.Ru
Добавить комментарий