首页 > 解决方案 > MTLCreateSystemDefaultDevice 的引用计数返回值

问题描述

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

id<MTLDevice> device = MTLCreateSystemDefaultDevice()

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

标签: objective-ccocoa

解决方案


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

至于id<MTLDevice>,就是idObjective-C 的通用对象类型,带有协议标识<MTLDevice>,表示 所指向的对象device符合MTLDevice协议。(有点奇怪,这实际上比id单独的限制性更强,因为如果您尝试调用不受其支持的方法MTLDevice及其超级协议以外的方法,编译器会发出警告。)并不是说对象是幕后的某个具体类,它只是一个私有的实现细节。


推荐阅读