什么更有效率? 存储变量引用与不(Android中的上下文)

假设我们正处于一种方法的中间。 而且我有两种编程风格的选择。

选项A:每次需要访问资源时,使用getContext().getResources()

 public void doSomeStuffA(){ //... getContext().getResources().getDrawable(R.drawable.ic_launcher); getContext().getResources().getDrawable(R.drawable.ic_arrow); //... } 

选项B :将getContext().getResources()在变量中。

 public void doSomeStuffB(){ //... Resources r = getContext().getResources(); r.getDrawable(R.drawable.ic_launcher); r.getDrawable(R.drawable.ic_arrow); //... } 

哪种风格更好?

在性能和调整方面如此之多,正确答案是“取决于”。 99%的时间,一个额外的哈希值解引用与变量引用之间的差异不是最大的(甚至是显而易见的)性能问题。 诀窍是了解什么时候可能是一个问题(例如,在紧密的循环中频繁的调用)。

在单一的方法中,我倾向于使用选项B主要是为了可读性。

作为一般的做法(尤其不是这种情况)

使用选项A:

  • 资源不断变化,你想要最近的资源价值。

  • 如果你只是在资源上调用方法一次。

使用选项B:

  • 资源不会改变,那么你可以使用一个引用,并在任何你想要的地方使用它。

使用Kotlin使一切干净)

 fun someFun() { with(getContext()) { var d1 = getDrawable(R.drawable.ic1) val d2 = getDrawable(R.drawable.ic2) ... } }