id <MTLDevice>和MTLDevice *有什么区别?

时间:2019-06-13 20:21:06

标签: objective-c metal

访问MTLDevice时,本教程始终鼓励使用id<MTLDevice>而不是MTLDevice*

如果将id用作指向任何ObjC对象的指针,那么id<MTLDevice>MTLDevice*有什么区别?

为什么MTLDevice不正确?它显示“ 类型参数'GDevice *'(aka'struct GDevice *')既不是Objective-C对象也不是块类型

1 个答案:

答案 0 :(得分:3)

语法id<P>的意思是“符合协议P的对象”。

相反,T*的意思是“指向类型/类T的对象的指针”。

但是MTLDevice是协议,而不是类型/类。这就是为什么我们使用id<MTLDevice>而不是MTLDevice *的原因。

因此,请考虑以下事项:

id<MTLDevice> device;

这意味着device是对符合MTLDevice协议的对象的引用。

有关在这些尖括号中使用id的更多信息,请参见Programming with Objective-C: Working with Protocols