2015-10-25 53 views
1

舉例來說,如果我有一個對象,它實現了一次性的實例,讓我們說這是如何正確使用dispose()?

BitmapFont someFont = new BitmapFont(); 

據LibGDX文件,我應該儘快調用Dispose()方法的對象不再需要。但是,如果決定要新字體分配給同一個變量:

someFont = new BitmapFont(); 

我應該先調用Dispose(),以防止內存泄漏這樣的分配過嗎?換句話說,該變種是正確的,這

BitmapFont someFont = new BitmapFont(); 
    //do something 
    someFont.dispose(); 
    someFont = new BitmapFont(); 
    //do something else 
    someFont.dispose(); 

或本:

BitmapFont someFont = new BitmapFont(); 
    //do something 
    someFont = new BitmapFont(); 
    //do something else 
    someFont.dispose(); 

我正在想,第一個是正確的,它是seemes的Dispose()的行爲就像C++中的析構函數,除非它不是自動調用的。

那麼,哪個版本其實是正確的?

+0

注意,你不應該動態地創建新字體」 「,因爲這很慢。嘗試在創建應用程序時創建它們,並保留它們直到完全關閉應用程序。 –

回答

3

你的變量只是一個指向給定對象的指針,而不是一個包含它所包含的所有引用的總括容器。如果您要遵循第二個代碼示例,則只需調用第二個BitmapFont實例,而不是第一個。你的第一個模式在技術上是正確的,你也可以考慮try/finally模塊,以確保在你完成處理時調用dispose。

-2

繼續你的第二個例子,第一個例子也是正確的,但是由於你再次使用相同的指針,所以對第一個dispose()的調用是多餘的。 祝你好運:)

更新:

對不起!我檢查我錯了:/你需要調用第一的Dispose()功能,以避免內存泄漏所以正確的例子是第一個

+0

但是,第一個字體永遠不會被丟棄,並導致內存泄漏。 –

+0

@ minos23,你確定嗎? :) – Tony

+0

我的想法是基於一個反射,如果無論如何調用dispose()方法,如何可以泄漏內存,如果我們看看dispose()方法,我們可以看到所有紋理都將被丟棄 – Netero