Комментарии 7
Структура StructForProperty имеет в своем составе переменную ссылочного типа, поэтому ничего удивительного.
А зачем экономить стек ?) То есть дизайнеры свифта специально придумали структуры чтобы как можно больше хранить в стэке, а вы предлагаете от него отказаться... Это как поставить в комп 60 Гб оперативы и использовать только 6 Гб, а остальное свапать на диск. Да, размер стэка влияет на размер бинарника, но не считаю это весомым аргументом отказываться от структур.
Еще можно рассказать про release/retain для полей структур и классов и какой оверхед рантайма происходит при передачи этих объектов )
размер стэка влияет на размер бинарника
Это где? И почему?
Ведь скорость работы структур достигается не какой-то магической силой) Моё понимание, что компилятор разворачивает структуры на стеке, это дополнительные инструкции, которые будут сохранены в data (или text) сегменте бинарника. То есть вместо хранения одной reference переменной на инстанс класса в heap, в функцию будет скопирована вся структуру со всеми полями. https://stackoverflow.com/questions/52372423/why-does-usage-of-structs-increase-applications-binary-size и https://forums.swift.org/t/how-do-structs-increase-binary-size/35208. Получается аналогия с инлайнингом функций, которые тоже увеличивают размер приложения.
Где-то видел статью, что человек переделал несколько сотен структур на классы и размер приложения уменьшился на 13 мб, но не могу найти ссылку.
Использовать структуры с использованием протоколов плохо для Stack, но хорошо для скорости выполнения.
возможно callsite действительно будет быстрым, но сама инжекция объекта по коду будет медленной из-за release/retain и чем больше reference полей будет у структуры тем существенней будет проседать райнтайм.
Кажется, что размер стека – это параметр, который вполне может быть рассчитан на этапе компиляции (если Вы не используете рекурсию). Поэтому проблем с переполнением стека в вашей программе быть не должно (компилятор подсчитает и установит необходимый вам размер стека) и сам этот пункт можно исключить из списка недостатков структур.
Swift. Struct vs Class memory and performance comparison или следует ли всегда использовать Struct