- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
过去两年我一直在自学 Excel VBA,我认为有时在代码段末尾处理变量是合适的。例如,我已经看到它在改编自Ron de Bruin's code for transferring Excel to HTML的这一点中完成了。 :
Function SaveContentToHTML (Rng as Range)
Dim FileForHTMLStorage As Object
Dim TextStreamOfHTML As Object
Dim TemporaryFileLocation As String
Dim TemporaryWorkbook As Workbook
...
TemporaryWorkbook.Close savechanges:=False
Kill TemporaryFileLocation
Set TextStreamOfHTML = Nothing
Set FileForHTMLStorage = Nothing
Set TemporaryWorkbook = Nothing
End Function
我对此进行了一些搜索,除了如何做到这一点之外几乎没有发现什么,在一篇论坛帖子 a statement that no local variables need to be cleared 中,因为它们在 End Sub
处不再存在。根据上面的代码,我猜测在 End Function
或我没有遇到过的其他情况下可能不是这样。
所以我的问题归结为:
如果没有,请有人解释一下......
最佳答案
VB6/VBA 使用确定性方法来销毁对象。每个对象都存储对其自身的引用数量。当数字达到零时,该对象将被销毁。
当对象变量超出范围时,保证被清除(设置为Nothing
),这会减少各自对象中的引用计数器。无需手动操作。
只有两种情况需要显式清理:
当您希望在其变量超出范围之前销毁对象时(例如,您的过程将需要很长时间才能执行,并且该对象拥有资源,因此您希望将对象销毁为尽快释放资源)。
当两个或多个对象之间存在循环引用时。
如果objectA
存储对objectB
的引用,并且objectB
存储对objectA
的引用,则这两个对象除非您通过显式设置 objectA.ReferenceToB = Nothing
或 objectB.ReferenceToA = Nothing
来中断链,否则永远不会被销毁。
您显示的代码片段是错误的。无需手动清理。进行手动清理甚至是有害的,因为它会给你一个 false sense of more correct code .
如果您在类级别有一个变量,则当类实例被破坏时,它将被清除/销毁。如果需要,您可以提前销毁它(请参阅第 1.
项)。
如果您在模块级别有一个变量,那么当您的程序退出时(或者,如果是 VBA,当 VBA 项目重置时),它将被清除/销毁。如果需要,您可以提前销毁它(请参阅第 1.
项)。
变量的访问级别(公共(public)与私有(private))不会影响其生命周期。
关于variables - 何时应终止 Excel VBA 变量或将其设置为 Nothing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19038350/
我是一名优秀的程序员,十分优秀!