2013-04-02 61 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

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

相關問題