Как и многие iOS разработчики, я столкнулся с дилеммой: какой объект использовать для построения архитектуры проекта. Взять для примера реализацию паттерна фасад. Этот объект должен принять некоторое количество сущностей и реализовать методы для упрощенного доступа к ним. Если не вдаваться в подробности, то подойдет и класс, и структура: оба могут инкапсулировать объекты и функции. Так что же выбрать? Если обратиться к статье на сайте Apple Choosing Between Structures and Classes, то следуя пункту "Use structures by default.", нужно использовать структуры в нашем случае. Если конечно не нужна Objective-C совместимость. Объекты наполнения для целевых объектов: Целевые объекты: Структуры передаются копированием значения. У классов вместо копирования используется ссылка на существующий экземпляр. Для некоторых стандартных типов значения реализован механизм Copy-on-Write, который позволяет передавать объект передавая адрес и копировать только если объект изменяется. Но Copy-on-Write не реализован у структур по-умолчанию, то есть StructForProperty будет передаваться копированием в любом случае. Проверим размещение объектов в памяти (опустим закрытые протоколом значения для чистоты эксперимента): Что и требовалось доказать:  Ссылочный объект имеет только один экземпляр в памяти. Тип значения имеет столько экземпляров в памяти, сколько раз он передавался. Тип значения с Copy-on-Write имеет только один экземпляр в памяти. В большинстве случаев структуры полностью хранятся в Stack, а классы хранятся в Heap, и ссылка на объект хранится в Stack. Stack имеет ограниченный размер. Heap не имеет ограничений по размеру. Из чего следует вывод, что память в Stack нужно беречь. Большая статья про память. Если беречь память Stack, то очевидно нужно использовать классы. Если брать общий размер, то оптимальным решением будет использование структур без использования протоколов. Но в таком случае страдает тестируемость, принципы SOLID и конечно Протокольно-ориентированное программирование. Так же не стоит забывать про копирование: размер занимаемой память структурой прямо пропорционален количеству присваиваний объекта. В теории время доступа к значениям класса дольше, так как переход по ссылкам требует большего времени. В то время как структуры находятся здесь и сейчас.  Замер получения булевой переменной в разных конфигурациях: Я провел несколько тестов и получил следующие средние значения:  Время доступа к ссылочному типу Время доступа к типу значения useClassWithoutProtocols 0,000009597 0,000007105 useClassWithProtocols 0,000009501 0,000008715 useStructWithoutProtocols 0,000008059 0,000008597 useStructWithProtocols 0,000007011 0,000007714 Значения примерно равнозначны. Однако стоит отметить, что использования структуры со значениями ссылочных типов, закрытых протоколами, незначительно экономит время доступа.  Stack Heap Время Принципы useClassWithoutProtocols + - - - useClassWithProtocols + -  + useStructWithoutProtocols - +  _ useStructWithProtocols - + + + Использовать структуры с использованием протоколов плохо для Stack, но хорошо для скорости выполнения. Использовать классы хорошо для Stack. Так как важно следить за Stack и соблюдать принципы, а время доступа незначительно отличается, я бы советовал использовать классы и протоколы для построения архитектуры.