Android 性能 - “避免内部 Getters/Setters”
只需在开发网站上阅读以下内容:
在像C++这样的母语中,通常的做法是使用getters(例如i = getCount())而不是直接访问字段(i = mCount)。对于C++来说,这是一个很好的习惯,因为编译器通常可以内联访问,如果需要限制或调试字段访问,可以随时添加代码。
在Android上,这是一个坏主意。虚拟方法调用成本高昂,远高于实例字段查找。遵循常见的面向对象编程实践并在公共接口中使用 getter 和 setter 是合理的,但在类中,您应该始终直接访问字段。
如果没有JIT,直接现场访问比调用一个微不足道的getter快3倍。使用JIT(直接现场访问与访问本地一样便宜),直接现场访问比调用微不足道的getter快7倍。这在 Froyo 中是正确的,但将来当 JIT 内联 getter 方法时会有所改善。
2019/05年更新:在当前版本中,上述材料已从文档中删除!
因此,它是否表示您将在类中使用字段访问:
public class MyObject {
public Object innerObject; // This would be private if I was using a getter
public void doSomeStuff(){
if(innerObject){ // Within class access like this
// ....
}
}
public Object getInnerObject(){ // This would be removed if I was using field access
return innerObject;
}
}
但是,从另一个对象访问呢?
public class SecondObject {
public void doSecondSomething(){
MyObject ob = new MyObject();
Object inner;
//This is my question basically (from an Android performance perspective)
inner = ob.getInnerObject();
// OR
inner = b.innerObject
}
}