Возвращаемое значение подсчета ссылок MTLCreateSystemDefaultDevice - PullRequest
0 голосов
/ 20 марта 2020

Я использую Objective- C без AR C и хочу знать, нужно ли мне освобождать устройство, возвращаемое MTLCreateSystemDefaultDevice, когда используется так:

id<MTLDevice> device = MTLCreateSystemDefaultDevice()

Я не уверен как id<MTLDevice> работает для поддержания счетчика ссылок. Основываясь на соглашениях об именах для управления памятью, я предполагаю, что MTLCreateSystemDefaultDevice не добавляет ссылку (но может быть ошибочным), но, возможно, присвоение id<MTLDevice> приводит к вызову сохранения?

1 Ответ

1 голос
/ 21 марта 2020

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

Что касается id<MTLDevice>, это id, тип объекта generi c Objective- C, с обозначением протокола <MTLDevice>, указывающим, что объект, на который указывает device, соответствует протоколу MTLDevice. (Как ни странно, это на самом деле более ограничительно, чем один id, поскольку компилятор будет предупреждать, если вы попытаетесь вызвать методы, отличные от тех, которые поддерживаются MTLDevice и его супер-протоколами.) Не то, чтобы объект принадлежал к какому-то конкретному классу за кулисами, это просто частная реализация детали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...