【问题标题】:What's the difference between id<MTLDevice> and MTLDevice*?id<MTLDevice> 和 MTLDevice* 有什么区别?
【发布时间】:2019-06-13 20:21:06
【问题描述】:

访问 MTLDevice 时,教程总是鼓励使用id&lt;MTLDevice&gt; 而不是MTLDevice*

如果id用作指向任何ObjC对象的指针,那么id&lt;MTLDevice&gt;MTLDevice*有什么区别?

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

【问题讨论】:

    标签: objective-c metal


    【解决方案1】:

    语法id&lt;P&gt;的意思是“一个符合P协议的对象”。

    相比之下,T* 表示“指向T 类型/类对象的指针”。

    但是MTLDevice 是一个协议,而不是一个类型/类。这就是为什么我们使用id&lt;MTLDevice&gt;,而不是MTLDevice *

    所以,考虑以下几点:

    id<MTLDevice> device;
    

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

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

    【讨论】:

    • 谢谢。对于对象类型,id 和 type* 有区别吗?
    • id&lt;P&gt; 表示“符合协议P 的对象”,而T* 是“类型为T 的对象”。在Programming with Objective-C: Working with Protocols 中,它说“Objective-C 使用尖括号来表示对协议的一致性。”所以,不是id&lt;type&gt;,而是id&lt;protocol&gt;。因为MTLDevice 是协议而不是类型,所以我们使用id&lt;MTLDevice&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2015-10-14
    相关资源
    最近更新 更多