Да, вам нужно отпустить объект, когда вы закончите с ним. Для функций C (а не для сообщений Objective- C) соответствующим соглашением об именах является Правило создания . Поскольку в названии функции указано «Создать», она возвращает ссылку +1, которую вы несете ответственность за освобождение. (Тот факт, что он возвращает тип Objective- C, а не тип Core Foundation, не важен.)
Что касается id<MTLDevice>
, это id
, тип объекта generi c Objective- C, с обозначением протокола <MTLDevice>
, указывающим, что объект, на который указывает device
, соответствует протоколу MTLDevice
. (Как ни странно, это на самом деле более ограничительно, чем один id
, поскольку компилятор будет предупреждать, если вы попытаетесь вызвать методы, отличные от тех, которые поддерживаются MTLDevice
и его супер-протоколами.) Не то, чтобы объект принадлежал к какому-то конкретному классу за кулисами, это просто частная реализация детали.