2015-04-07 46 views
2

我正在使用 id<MTLBuffer> vertexBuf = [device newBufferWithLength:count * sizeof(float) options:0];
如何釋放vertexBuf內存,它會大幅增加內存。在蘋果的文檔中,沒有提示要釋放MTLBuffers。在我的情況下,我不能再次使用它。我試過vertexBuf = nil;沒有改進,我不能使用[vertexBuf release],因爲我的項目啓用了ARC。任何方式來釋放內存?如何釋放id <MTLBuffer> metal iOS?

編輯:
我可以重複使用,但OpenGLES2 glDeleteBuffers中有一個選項,在許多情況下很有用。所以我在尋找類似金屬的東西。

+0

爲什麼你不能重用緩衝區? – aledalgrande

+0

我可以重用,但在OpenGLES2中有一個選項glDeleteBuffers,在很多情況下很有用。所以我在尋找類似於金屬的東西。 – VivekParamasivam

+1

嘗試在Apple開發論壇中詢問:https://devforums.apple.com/community/ios/graphics/metal – aledalgrande

回答

0

找出誰在使用vertexBuf。有人正在使用它,並堅持下去,否則,如果將其設置爲零,內存將消失。

順便說一句。發佈不會幫助你。 ARC會爲你保留/發佈,除非它可能更加謹慎並始終保持正確。如果你可以釋放它並且內存消失,那麼當使用vertexBuf的人也可以釋放它時,你的應用程序會崩潰。

+0

考慮一個狀態,你知道沒有人持有vertexBuf,在這種狀態下我們需要dealloc。那麼如何dealloc? – VivekParamasivam

0

試試這個:[vertexBuf setPurgeableState:MTLPurgeableStateEmpty];

這是來自蘋果的文檔:

如果狀態是MTLPurgeableStateEmpty,資源將被標記爲可丟棄的數據,因爲調用者不再需要的內容資源。