UITableView не держит ячейку на каждую строку модели. На экране есть только видимые ячейки и небольшой запас за краем.
Ушедшая за край ячейка возвращается в пул. dequeueReusableCell достаёт её оттуда и заполняет заново под новый index path. Поэтому память зависит от высоты экрана, а не от длины списка.