2013-05-09 54 views

回答

6

通常,當你分配一個類的實例時,它會進入堆中,直到它被釋放爲止。但是如果你用代碼聲明瞭一個內聯塊,它會進入堆棧。當堆棧框架消失時,塊實例也會消失 - 除非您將其複製,從而創建一個堆駐留實例。基本上,如果你想在棧幀彈出後繼續使用這個塊,你需要在某個地方創建一個副本。

+0

謝謝。你什麼時候不需要複製一個塊? – Boon 2013-05-09 22:12:38

+1

大多數情況下,當其他人爲你做時,例如如果你調用一個基於塊的API來在內部進行復制。也可以像聲明一個函數一樣聲明靜態塊,而不是內聯代碼。那些將會堆在一起,不需要被複制。 – 2013-05-09 23:01:43

0

塊在堆棧上創建並在執行到達當前作用域的末尾時銷燬。爲了防止這種情況發生,你必須複製它們,使它們被複制到堆中。通常你會複製一個你想在稍後的時間點調用它的區塊,而不是它創建的範圍。

相關問題