我见过开发人员在他们编写的几乎所有方法中都尝试,捕获并最终消除了他们在Finally块中创建的对象。
EG -
(...)
import {HTTP_PROVIDERS} from 'angular2/http';
@App({
template: `
(...)
`,
config: {},
providers: [ HTTP_PROVIDERS ]
})
export class MyApp {
(...)
}
这样做有用吗?建议这样做是为了使对象无效,因此 GC 可以收集它们。
如果不这样做,我们可以使用" 使用"或 IDisposable ?
最佳做法是什么?
答案 0 :(得分:8)
将对象设置为null并不执行任何操作,因为它将超出范围。因此,简短的答案是肯定的,这很糟糕。您正在添加不会增加任何价值的代码,而这些代码最终将成为其他程序员必须阅读的内容,而且最多只是删除。它也可能会让其他程序员对你为什么这么做感到困惑。
在您的示例中,您还扩展了对象的范围,以便您可以在finally块中将其清空。理想情况下,您应该在try块中声明它,并让它超出范围。
答案 1 :(得分:0)
一旦您的方法返回,参考s
将可用于GC。您可以使用using
块(假设您的对象实现了IDisposable)来保证在发生错误时处理该对象,这与您的finally
块类似。