Да, это стандартное поведение.
Когда мы создаем объект класса в Swift (например), сам объект размещается в куче. Переменная, которую мы объявляем для хранения этого объекта, по сути, является ссылкой (указателем) на данные в куче и хранится в стеке.
Пример на Swift:
swift
Аналогично в Objective-C:
objc
В обоих случаях переменная myObject находится в стеке, а сам экземплекс объекта MyObject — в куче. Переменная myObject содержит адрес в памяти, где лежит объект в куче.