如何在iOS Metal中释放id<MTLBuffer>?

3
我正在使用以下代码:id<MTLBuffer> vertexBuf = [device newBufferWithLength:count * sizeof(float) options:0];
如何释放vertexBuf的内存,因为它会大幅增加内存。在苹果的文档中没有提示释放MTLBuffers的方式。在我的情况下,我无法再次重用它。我尝试了vertexBuf = nil;没有改善,而且由于我的项目启用了ARC,我不能使用[vertexBuf release]。有没有办法释放内存?
编辑:
我可以重新使用它,但在OpenGLES2中有一个选项glDeleteBuffers,它在许多情况下非常有用。所以我正在寻找类似于Metal的功能。

为什么不能重复使用缓冲区? - aledalgrande
我可以重用,但在 OpenGLES2 中有一个选项 glDeleteBuffers,在许多情况下非常有用。因此,我正在寻找类似于 Metal 的选项。 - VivekParamasivam
1
尝试在苹果开发者论坛上提问:https://devforums.apple.com/community/ios/graphics/metal - aledalgrande
2个回答

1
尝试这个:[vertexBuf setPurgeableState:MTLPurgeableStateEmpty]; 这是来自苹果文档的内容:
如果状态为MTLPurgeableStateEmpty,则将资源标记为可丢弃的数据,因为调用方不再需要该资源的内容。

1

查找谁在使用vertexBuf。有人正在使用它,而且保持着它,否则如果将其设置为nil,则内存会消失。

顺便说一下,释放不会对你有帮助。ARC会自动为您保留/释放,除非它更加谨慎并且总是正确的。如果您可以释放它并且内存消失了,那么当使用vertexBuf的人也释放它时,您的应用程序将崩溃。


考虑一种状态,即您知道没有人持有vertexBuf,在该状态下我们需要释放。那么如何释放? - VivekParamasivam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接