MTLCreateSystemDefaultDevice 的引用计数 return 值

Reference counting return value of MTLCreateSystemDefaultDevice

我正在使用没有 ARC 的 Objective-C 并且想知道我是否需要释放 MTLCreateSystemDefaultDevice 返回的设备,当这样使用时:

id<MTLDevice> device = MTLCreateSystemDefaultDevice()

我不确定 id<MTLDevice> 如何维护引用计数。基于内存管理的命名约定,我假设 MTLCreateSystemDefaultDevice 不添加引用(但可能是错误的),但可能分配给 id<MTLDevice> 会导致调用保留?

是的,您需要在使用完后释放该对象。对于 C 函数(而不是 Objective-C 消息),相关的命名约定是 Create Rule。因为该函数的名称中有 "Create",所以它 returns 是您负责发布的 +1 引用。 (它返回 Objective-C 类型而不是 Core Foundation 类型这一事实并不重要。)

至于id<MTLDevice>,即id,Objective-C的通用对象类型,协议指定<MTLDevice>表示[=13]指向的对象=] 符合 MTLDevice 协议。 (有点奇怪的是,这实际上比单独使用 id 更严格,因为如果您尝试调用 MTLDevice 及其超级协议支持的方法以外的方法,编译器会发出警告。)并不是说对象是幕后的一些具体 class,它只是一个私有实现细节。