2015-06-05 98 views
1

实例变量是否优先于局部变量,反之亦然?例如,使用SharedPreferences,它应该在类的顶部声明,然后在整个范围内引用,或者是否应该在每种方法中声明它需要?Android实例变量

我想知道是否会有很大的内存使用差异,因为实例变量会持续只要活动;然而,它会更清洁,因为我不需要在它使用的每种方法中实例化它。

回答

3

你应该更喜欢局部变量在类变量任何一天。

拥有大量影响不同方法中代码执行的实例变量会给你带来很多状态。这使得很难推理它,例如,当你试图通过头脑中的功能来发现错误时。

我喜欢通过不使用对象状态static并传递他们需要的所有参数作为参数的方法来更进一步。这样,您可以查看完全与类上下文隔离的此功能。 我的目标是结束pure functions,这很容易推理。

如果有必要让这些功能中的一个不纯,那可能意味着糟糕的设计决定!


然而有一些东西的地方是有意义的“缓存”他们在类级别:

  • 从您的布局图。 findViewById()的成本非常高,所以如果你认为你需要更多的方法,那么你应该“缓存”它。 ButterKnife库使这非常简单。
  • 数据库连接或实际上任何开启/关闭成本很高的任何东西。 但是,请勿将这些“铺设”在活动中。将它们隐藏在一个类中,并使该类负责处理打开的资源。

一般来说:类变量使你的类更加有状态。对于性质稳定的类(例如ActivityFragment),这是很好的,但是你应该尽量减少你必须担心的状态量。

+0

很高兴知道'findViewById()'。谢谢。 – mattfred

0

它取决于你想要的变量的用途。如果你想要一个在整个类中需要的变量,你将需要在类的顶部声明它,但是如果相反,你要声明的变量只是在方法上使用,你应该声明它在这个方法里面。

如果它使用更多的内存或更少的内存(我真的不知道的概念),我不能对你说,但我可以确保你的代码将以这种方式更清晰。

我对此并不担心,但我认为每次声明一个变量时都会消耗一些内存使用量,因此,总而言之,如果您在每种方法中都有一个变量,它会消耗更多的内存使用量在班上名列前茅。如果知道这件事的人必须纠正我,请做。

我期待它对你有所帮助!

+1

不是声明一个变量占用空间(声明=“这将是一个int”),但初始化(调用构造函数/赋值)耗费内存。连接到局部变量的唯一的** maginal **问题不是原始的,当没有更多引用时,它们必须被垃圾收集。 –

+0

@LukasKnuth是的,我想引用初始化而不是声明。感谢您的支持,并感谢您的解释! –

1

这个问题似乎归结为时间/空间的折衷,在这种情况下,我会说答案取决于。一般情况下,我会默认在对象构建时默认一次读取持久对象,但特别是在这样做时,如果有显着的性能成本。但是,如果在内存中存储空间并且存储有问题的对象空间成本过高,那么我会考虑根据需要来阅读它。

+0

感谢您输入@Lee – mattfred