2013-05-09 55 views

回答

6

通常,当你分配一个类的实例时,它会进入堆中,直到它被释放为止。但是如果你用代码声明了一个内联块,它会进入堆栈。当堆栈框架消失时,块实例也会消失 - 除非您将其复制,从而创建一个堆驻留实例。基本上,如果你想在栈帧弹出后继续使用这个块,你需要在某个地方创建一个副本。

+0

谢谢。你什么时候不需要复制一个块? – Boon 2013-05-09 22:12:38

+1

大多数情况下,当其他人为你做时,例如如果你调用一个基于块的API来在内部进行复制。也可以像声明一个函数一样声明静态块,而不是内联代码。那些将会堆在一起,不需要被复制。 – 2013-05-09 23:01:43

0

块在堆栈上创建并在执行到达当前作用域的末尾时销毁。为了防止这种情况发生,你必须复制它们,使它们被复制到堆中。通常你会复制一个你想在稍后的时间点调用它的区块,而不是它创建的范围。

相关问题