2013-04-02 1 views
9

मेरा प्रश्न भर एंड्रॉयड के पूरे API लाइब्रेरी कॉल एक results[] पैरामीटर के लिए पूछने का एक बहुत उदाहरण के लिए विधि में प्रदान किया जाने है:एंड्रॉइड एपीआई रिटर्न विधि के विपरीत परिणाम पैरामीटर के लिए क्यों पूछता है?

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; 
} 

एंड्रॉयड के लिए कॉल Location.distanceBetween() है और यह results[] की आवश्यकता है वे विधि में वापसी हस्ताक्षर क्यों शामिल नहीं करते हैं? मुझे लगता है कि यह किसी प्रकार की स्मृति या गति अनुकूलन है। मैं इसके पीछे सटीक तर्क पर अनिश्चित हूं।

+7

संभवतः आपको एक ही ऑब्जेक्ट (इस मामले में सरणी) में विधियों के कई आमंत्रणों में गुजरने के लिए लचीलापन देने के लिए, इस प्रकार प्रत्येक कॉल पर आवंटन स्मृति की आवश्यकता को रोकना। –

+0

तो मुझे लगता है कि मैं 'निजी फ्लोट [] परिणाम = नई फ्लोट [3];' @RobI – Hones

+0

होने से गलत कर रहा हूं। यदि आप उस विधि को अक्सर कॉल करने की अपेक्षा नहीं करते हैं (उदाहरण के लिए, जैसे ही उपयोगकर्ता एक बटन पर क्लिक करता है), तो इससे कोई फर्क नहीं पड़ता। यदि आपका कोड इसे लाखों बार बुला रहा है, तो आप उस सरणी को आवंटन को कम करने के लिए एक क्षेत्र बनाने पर विचार कर सकते हैं। –

उत्तर

2

आप सही हैं, यह अनुकूलन के बारे में है, इस तरह आप हर बार स्मृति आवंटित किए बिना इस विधि को कई बार कॉल कर सकते हैं। मुझे लगता है कि कभी नहीं की तुलना में http://codeyarns.com/2010/10/21/c-return-value-versus-output-parameter/
बेहतर देर से: -

संपादित यहाँ एक परीक्षण तो है।

+13

यह उत्तर एक संदर्भ या दो का हवाला देते हुए स्पष्ट रूप से बेहतर किया जाएगा। –

+0

आपको एक एकल - पंजीकरण आकार - मूल्य लौटने के लिए स्मृति आवंटित क्यों करना होगा? यहां तक ​​कि सबसे सरल जिटर भी एआरएम पर रिटर्न वैल्यू को 'आर 0' (अच्छी तरह से 's0') में डाल देगा - आवंटित किए जाने पर कोई मेमोरी नहीं .. – Voo

+0

ठीक है, ठीक है, वहां है ... –

संबंधित मुद्दे