Функция может возвращать CGPoint
, потому что структура "достаточно мала", чтобы быть возвращенной непосредственно из функции. Вы не возвращаете указатель, вы возвращаете все это напрямую. То же самое с методами, которые принимают CGPoints
в качестве параметров - вы можете передать все это по значению напрямую.
Как отмечает Дейв, CGPoints - это не объекты, а просто структуры. CGPointMake
не «выделяет» память. Это просто функция, которая возвращает структуру, настроенную с правильными размерами, которую вы обычно записываете в локальный файл в своем стеке или передаете или как угодно.
Как и любой другой примитивный тип (int, float или другая структура), его не нужно освобождать, когда он выходит из области видимости.
(Примечание: многие архитектуры / компиляторы / «двоичные интерфейсы приложений» имеют оптимизации и ограничения по размеру, касающиеся размера объекта, используемого в качестве аргумента или возвращаемого значения. В этом случае CGPoint может фактически полностью поместиться в один 64- битовый регистр (2x 32-битные числа с плавающей запятой), что делает его не более тяжелым, чем возвращающий int. Но компилятор может также выполнять другие приемы, такие как копирование в и из более крупных структур, например CGRect.)