objective-c - MTLCreateSystemDefaultDevice 的引用计数返回值
问题描述
我正在使用没有 ARC 的 Objective-C,并且想知道我是否需要释放使用MTLCreateSystemDefaultDevice
时返回的设备,如下所示:
id<MTLDevice> device = MTLCreateSystemDefaultDevice()
我不确定如何id<MTLDevice>
保持引用计数。根据内存管理的命名约定,我假设MTLCreateSystemDefaultDevice
不添加引用(但可能是错误的),但可能分配给id<MTLDevice>
导致调用保留?
解决方案
是的,您需要在完成后释放该对象。对于 C 函数(而不是 Objective-C 消息),相关的命名约定是Create Rule。因为该函数的名称中有“Create”,所以它返回一个您负责释放的 +1 引用。(它返回的是 Objective-C 类型而不是 Core Foundation 类型这一事实并不重要。)
至于id<MTLDevice>
,就是id
Objective-C 的通用对象类型,带有协议标识<MTLDevice>
,表示 所指向的对象device
符合MTLDevice
协议。(有点奇怪,这实际上比id
单独的限制性更强,因为如果您尝试调用不受其支持的方法MTLDevice
及其超级协议以外的方法,编译器会发出警告。)并不是说对象是幕后的某个具体类,它只是一个私有的实现细节。
推荐阅读
- google-cloud-platform - 无法在谷歌云存储 gui 中打开文件夹
- java - 如何解密存储在 sessionStorage 中的数据
- php - 将任何 json 数据放在带有 $.each 的标签中
- c# - 从 .Net 控制台应用程序调用 AWS lambda
- scala - How to call an InputKey from within a Task in an SBT Plugin
- jquery - jQuery:仅以内联样式更改背景图像上的线性渐变
- c# - 可靠集合应用程序(组装)是特定的吗?
- java - Java:获取 MIME 多部分 BodyPart 的内容
- visual-studio - 为什么 Visual Studio 从 15.7.X -> 15.9.X 升级后无法打开我的项目
- javascript - 为什么我的报价单在我输入内容后就消失了?