В чем разница между id <MTLDevice>и MTLDevice *? - PullRequest
1 голос
/ 13 июня 2019

При доступе к MTLDevice учебник всегда поощряет id<MTLDevice>, а не MTLDevice*.

Если идентификатор используется в качестве указателя, указывающего на любой объект ObjC, то в чем разница между id<MTLDevice> и MTLDevice*?

Почему MTLDevice не правильный? Он показывает, что « Аргумент типа« GDevice * »(он же« struct GDevice * ») не является ни объектом Objective-C, ни типом блока »

1 Ответ

3 голосов
/ 13 июня 2019

Синтаксис id<P> означает «объект, соответствующий протоколу P».

Напротив, T* означает «указатель на объект типа / класса T».

Но MTLDevice - это протокол, а не тип / класс. Вот почему мы используем id<MTLDevice>, а не MTLDevice *.

Итак, рассмотрим следующее:

id<MTLDevice> device;

Это означает, что device является ссылкой на объект, соответствующий протоколу MTLDevice.

Для получения дополнительной информации об использовании id с этими угловыми скобками см. Программирование с помощью Objective C: Работа с протоколами .

...