访问MTLDevice时,本教程始终鼓励使用id<MTLDevice>
而不是MTLDevice*
。
如果将id用作指向任何ObjC对象的指针,那么id<MTLDevice>
和MTLDevice*
有什么区别?
为什么MTLDevice不正确?它显示“ 类型参数'GDevice *'(aka'struct GDevice *')既不是Objective-C对象也不是块类型”
答案 0 :(得分:3)
语法id<P>
的意思是“符合协议P
的对象”。
相反,T*
的意思是“指向类型/类T
的对象的指针”。
但是MTLDevice
是协议,而不是类型/类。这就是为什么我们使用id<MTLDevice>
而不是MTLDevice *
的原因。
因此,请考虑以下事项:
id<MTLDevice> device;
这意味着device
是对符合MTLDevice
协议的对象的引用。
有关在这些尖括号中使用id
的更多信息,请参见Programming with Objective-C: Working with Protocols。