2011-06-23 12 views
8

के लिए AVAudioPlayer का पुन: उपयोग करना मेरे पास AVAudioPlayer का एक उदाहरण है जो कई ध्वनियां चलाएगा। क्या एक नई ध्वनि के साथ AVAudioPlayer इंस्टेंस प्रदान करने का कोई तरीका है, या क्या मुझे initWithData के साथ एक नया उदाहरण बनाना है :?एक अलग ध्वनि

उत्तर

1

ऑब्जेक्ट्स का पुन: उपयोग करना आम तौर पर एक बुरा विचार है, आम तौर पर अपनी वस्तुओं को यथासंभव कम से कम रहने की कोशिश करें। इससे आपके कोड के संभावित राज्यों की संख्या कम हो जाती है और इसके बारे में तर्क आसान हो जाता है। ("यह मूल्य कहां से आया? शायद यह पिछले उदाहरण के उपयोग से बचे हुए है?" यक।) मापने योग्य समस्याओं में भाग लेने के बाद ही इस नियम को तोड़ दें।

इस विचार के साथ आगे पढ़ने के लिए आप questions tagged “immutable” ब्राउज़ कर सकते हैं।

+13

यह @ फर्नांडो के प्रश्न का उत्तर नहीं है, और यह एक अति-सामान्यीकरण है। ऐसे कई संदर्भ हैं जहां ऑब्जेक्ट पुन: उपयोग नई ऑब्जेक्ट सृजन की तुलना में बेहतर दृष्टिकोण है। –

+1

मुझे लगता है कि क्रिस्टोफर सही है। यह प्रदर्शन कारणों से है। उदाहरण के लिए, तालिका दृश्य मौजूदा कोशिकाओं का पुन: उपयोग करता है और ऐप्पल स्पष्ट रूप से इसे प्रोत्साहित करता है। कम से कम आपने पोस्टर्स के सवाल का जवाब दिया था, "फ़ाइल को बदलने का कोई तरीका नहीं है" जैसा कि क्रिस्टोफर ने किया था। –

+0

तालिका दृश्य एक विशेष मामला है क्योंकि इसे कठिन प्रदर्शन आवश्यकताओं (स्क्रॉलिंग) को पूरा करना है। लेकिन आम तौर पर एक नए ऑब्जेक्ट निर्माण की प्रदर्शन लागत काफी कम है और मैं इस बयान से खड़ा हूं कि प्रदर्शन समस्या को मारने तक वस्तुओं का पुन: उपयोग करना एक बुरा विचार है। – zoul

19

मौजूदा AVAudioPlayer उदाहरण में कोई नई फ़ाइल पास करने के लिए कोई एपीआई नहीं है। हालांकि, AVAudioPlayer निर्माण महंगा नहीं है, इसलिए आपको प्रदर्शन के बारे में चिंतित नहीं होना चाहिए, जब तक आप उनके साथ किए जाने के बाद उदाहरण जारी करते हैं।

यदि आपके पास एक दूसरे पर चलने वाली ध्वनि का एक निश्चित सेट है, या बार-बार खेलने की संभावना है, तो आप प्रत्येक ध्वनि के लिए एक AVAudioPlayer इंस्टेंस बना सकते हैं और उचित उदाहरण पर play पर कॉल करके उन उदाहरणों का पुन: उपयोग कर सकते हैं।

यदि एक समय में केवल एक ध्वनि चल रही है, और आप नई आवाज़ें उत्पन्न कर रहे हैं (उदाहरण के लिए उपयोगकर्ता इनपुट के आधार पर टेक्स्ट-टू-स्पीच के साथ), तो मेरे पास आम तौर पर एक एकल खिलाड़ी होता है। जब एक नई आवाज बजाती है, तो मैं [player stop] पर कॉल करता हूं, पुराना खिलाड़ी जारी करता हूं, और नई ध्वनि फ़ाइल के साथ एक नया चालू करता हूं।

+2

हाँ, मैंने इस प्रश्न के लिए Google की खोज की क्योंकि मैंने सोचा कि बहुत से नए AVAudioPlayer को प्रदर्शन में गिरावट का कारण बन जाएगा। आपका उत्तर एक बार में मेरे प्रश्न हल करता है। 1) AVAudioPlayer में फ़ाइल को संशोधित करने का कोई तरीका नहीं 2) AVAudioPlayer बनाना महंगा नहीं है। –

+0

यह स्वीकार्य उत्तर होना चाहिए। – Herm

+0

एआरसी के तहत कोई सुझाव? – piperchester

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