实例变量是否优于局部变量,反之亦然?例如,使用SharedPreferences
时,是应该在类的顶部声明然后引用它还是应该只在每个方法中声明它?
我想知道内存使用量是否会有很大差异,因为实例变量会持续与活动一样长;但是,它会更清晰,因为我不需要在它使用的每个方法中实例化它。
答案 0 :(得分:3)
你应该优先选择局部变量而不是类变量。
有很多实例变量会影响不同方法的代码执行,这会让你有很多状态。这使得很难对其进行推理,例如当你试图通过脑中的某个功能来查找错误时。
我喜欢通过制作不操纵对象状态static
并将所需的所有内容作为参数传递的方法,更进一步。这样,您可以将此函数与类上下文完全隔离。 我的目标是以pure functions结束,这很容易理解。
如果有必要使其中一个功能不纯,那可能表明设计决策不佳!
但有一些事情在课堂上“缓存”它们是有道理的:
findViewById()
的成本非常高,所以如果你有一个只需要一个方法的视图,你应该“缓存”它。 ButterKnife库非常容易。一般来说:类变量使你的类更有状态。这适用于本质上属于状态的类(例如Activity
或Fragment
),但您应该尽量减少您需要担心的状态量。
答案 1 :(得分:1)
这个问题似乎归结为时间/空间的权衡,在这种情况下我会说答案取决于。在对象构建时,我通常默认支持读取持久化对象一次,但特别是在这样做时会有显着的性能成本。但是,如果在内存中溢价并且存储有问题的对象是空间成本过高,那么我会考虑根据需要阅读它。
答案 2 :(得分:0)
这取决于您对该变量的使用。如果你想要一个在整个类中需要的变量,你需要在类的顶部声明它,但相反,如果你要声明它的变量只是用在一个方法上,你应该在这个方法中声明它。
如果它使用更多内存或更少内存(我真的不知道这些概念),我无法告诉你,但我可以确保你的代码以这种方式更清晰。
我对此并不安全,但我认为每次声明变量都会消耗一些内存使用量,因此,如果每个方法中都有一个变量,它会消耗更多的内存使用量而不是在班级的顶部。如果知道这一点的人必须纠正我,请执行此操作。
我希望它会对你有所帮助!