为什么必须复制块而不保留块?两者之间有什么区别? 在什么情况下,你不需要复制一个块,如果有的话?为什么必须复制块而不保留块?你什么时候不需要复制一个块?
4
A
回答
6
通常,当你分配一个类的实例时,它会进入堆中,直到它被释放为止。但是如果你用代码声明了一个内联块,它会进入堆栈。当堆栈框架消失时,块实例也会消失 - 除非您将其复制,从而创建一个堆驻留实例。基本上,如果你想在栈帧弹出后继续使用这个块,你需要在某个地方创建一个副本。
0
块在堆栈上创建并在执行到达当前作用域的末尾时销毁。为了防止这种情况发生,你必须复制它们,使它们被复制到堆中。通常你会复制一个你想在稍后的时间点调用它的区块,而不是它创建的范围。
相关问题
- 1. 我们为什么要复制块而不是保留?
- 2. 你什么时候需要在Ruby中需要一个模块?
- 3. 为什么我必须保留/复制这个NSString?
- 4. 何时需要复制块?
- 5. 为什么要复制NSString而不是保留它?
- 6. EXC_BAD_ACCESS复制或保留块
- 7. 你为什么要从一个块创建一个模块?
- 8. 超越NARC:什么时候保留,何时分配,什么时候复制
- 9. 为什么try块需要一个catch
- 10. 为什么我需要在我想要使用该块时“阻止复制”?
- 11. “保留块属性不会复制块 - 使用复制属性代替
- 12. 为什么类对象的属性保留而不是复制?
- 13. 未完全复制的块数不准确,但为什么?
- 14. Application.DoEvents,什么时候需要,什么时候不需要?
- 15. HDFS不复制块
- 16. Ansible模板模块和复制模块有什么区别?
- 17. 为什么一个变量不需要类型的静态块
- 18. 什么时候在块中引用自我保留周期?
- 19. iOS:方法返回一个块然后块存储在数组中,我应该什么时候复制它?
- 20. 为什么'视图'需要被复制?
- 21. 当复制子模块时不要复制父节点
- 22. 为什么ActiveRecord不是一个模块?
- 23. 为什么当你有扇区时需要块,为什么块的大小是扇区大小的倍数?
- 24. JVM:什么时候JVM需要复制内存内容
- 25. 我必须在这里复制一个块吗?
- 26. 为什么ThreadAbortException不catch块
- 27. 为什么不读线块?
- 28. 为什么不sem_wait块
- 29. 为什么需要try/catch块的BufferedWriter
- 30. 什么时候定义一个模块,什么时候只需要使用requireJS文件
谢谢。你什么时候不需要复制一个块? – Boon 2013-05-09 22:12:38
大多数情况下,当其他人为你做时,例如如果你调用一个基于块的API来在内部进行复制。也可以像声明一个函数一样声明静态块,而不是内联代码。那些将会堆在一起,不需要被复制。 – 2013-05-09 23:01:43