2013-04-02 28 views
9

我的问题是在整个Android的的API了很多库调用索要results[]参数传递到方法,例如:为什么Android API要求结果参数而不是返回方法?

public boolean isInProximity(double startLat, double startLongitude, float meters) { 
    float[] results = new float[3]; 
    Location.distanceBetween(startLat, startLongitude, endLatitude, endLongitude, results); 
    return results[0] <= meters; 
} 

到Android的调用是Location.distanceBetween(),它需要results[]为什么他们不包括返回签名的方法?我假设它是某种内存或速度优化。我不确定背后的确切原因。

+7

可能会让您灵活地将相同的对象(本例中为数组)传递给方法的许多调用,从而避免每次调用时都需要分配内存。 –

+0

所以我认为我做错了'私人浮动[]结果=新的浮动[3];'@RobI – Hones

+0

不一定。如果你不希望这种方法经常被调用(例如,只有用户点击一个按钮的频率),那么它不会有什么不同。如果你的代码调用了数百万次,你可以考虑将该数组作为一个字段来减少分配。 –

回答

2

你是对的,它是关于优化的,你可以多次调用这个方法而不需要每次分配内存。

编辑 - 这是一个测试,以便:亡羊补牢我想http://codeyarns.com/2010/10/21/c-return-value-versus-output-parameter/
犹未晚。

+13

通过引用一个或两个参考文献可以明显改善这个答案。 –

+0

为什么你必须分配内存来返回一个单寄存器大小的值?即使是最简单的抖动也只是将返回值放在ARM的'r0'(这里是's0') - 没有任何内存在分配。 – Voo

+0

好吧,好吧,它是... –

相关问题