2011-07-15 17 views
10

मैं कभी-कभी अपनी परियोजनाओं में सिंगलटन (कई अलग-अलग वर्गों द्वारा उपयोग किए जाने वाले डेटा को स्टोर करने के लिए) का उपयोग कर रहा हूं और मैं सोच रहा हूं कि मेरे ऐपडिलेट का उपयोग क्यों न करें, क्योंकि यह पहले से ही सिंगलटन और एक्सेस करने में आसान है। क्या यह एक बुरा अभ्यास है और यदि हां, तो क्यों?क्या आपके एपडेल्गेट को अपने सिंगलटन के रूप में उपयोग करना एक बुरा अभ्यास है?

उत्तर

10

कोई सही इस का उत्तर नहीं है। आपको इस पर कई राय मिलेंगी। मैं AppDelegate उपयोग करने के साथ कोई समस्या नहीं देखते हैं, और मैं अपने सभी क्षुधा के लिए यह करना:

  • प्रतिनिधि iPhone क्षुधा के लिए व्यावहारिक रूप से अनिवार्य है,
  • यह ऐप्लिकेशन के जीवनकाल में नहीं है;
  • और कोई भी प्रोग्राम में कहीं से भी इसका उपयोग कर सकता है (हालांकि इसका दुरुपयोग न करें!)।

हालांकि सतर्क रहना चाहिए, इसलिए कोड जो आवश्यक नहीं है, वहां नहीं है। आप नहीं चाहते हैं कि आपका ऐपडिएगेट बड़े और अस्पष्ट हो जाए।

सवाल StackOverflow पर पहले उत्तर दिया गया है:

Application Design and AppDelegate

उस पर जवाब आप भी मदद मिल सकती।

+0

आप अन्य कक्षाओं से सीधे AppDelegate तक कैसे पहुंचेंगे? उदाहरण के लिए, इसमें किसी संपत्ति का उपयोग करें या कुछ – darksky

+1

अपने प्रतिनिधि को टाइप की गई पहुंच प्राप्त करने के लिए, YourAppDelegate * प्रतिनिधि = (YourAppDelegate *) [UIAplplication SharedAplication] को कॉल करें .delegate; – ageektrapped

+0

तो क्या विभिन्न व्यू कंट्रोलर में Appdelegate आयात करना ठीक है? यदि नहीं, कृपया मुझे कहीं बताएं कि – Nil

4

ऐपडिलेगेट लॉन्च, पृष्ठभूमि प्रविष्टि आदि में ऐप व्यवहार को संभालना चाहिए। आपको इसे और अधिक जटिल नहीं बनाना चाहिए क्योंकि यह एक अच्छा डिजाइन पैटर्न नहीं है। लेकिन आप हमेशा अपने ऐपडिलेगेट में अपने डेटास्टोर क्लास का संदर्भ रख सकते हैं, और ऐपडिलेगेट के माध्यम से इसे एक्सेस कर सकते हैं। इस तरह आप अपने ऐपडिलेगेट से संग्रहित डेटा डेटा करते हैं लेकिन आप अभी भी आसानी से इसे प्राप्त करने में सक्षम होंगे।

0

ठीक है, डेटा अबास्ट्रक्शन के मामले में यह असुरक्षित पक्ष पर थोड़ा सा हो सकता है, लेकिन मेरा मानना ​​है कि यह स्मृति में भी एक आसान जगह है। आपको क्या करना चाहिए, एक्सेसर विधियों के साथ चर को समाहित करना हो सकता है ताकि आपके पास समरूपता से संबंधित संचालन (यदि कोई हो)

लेकिन यदि आपका मतलब है कि एक यूआई कक्षा से दूसरे में ऑब्जेक्ट पास करना है, तो शायद आपको किसी अन्य से सदस्य के वैरिएबल को सेट करना, या डेटास्टोर इत्यादि का उपयोग करना चाहिए।

0

पूरे ऐप से प्रासंगिक नियंत्रक कोड की छोटी बिट्स के लिए, मैं ऐपडिलेगेट का उपयोग करता हूं। यदि कोड को एक अलग नियंत्रक ऑब्जेक्ट में विभाजित करने का एक समझदार तरीका है तो यह बेहतर होगा, क्योंकि मैंने ऐप प्रतिनिधियों को देखा है जो अप्रबंधनीय आकार में गुब्बारे हुए हैं।

यदि आप बाद में उनमें से एक से अधिक होना चाहते हैं तो यह आपके पुलों को जलाने के बिना 'सिंगलोनिज़' नियंत्रक ऑब्जेक्ट्स का एक अच्छा तरीका भी हो सकता है।

मैं वास्तव में इसे उपयोग करने AppDelegate पर एक वर्ग विधि शब्दों में कहें, तो मैं की तरह कर सकते हैं:

[[AppDelegate get].dataStore getRecordNumber:x] // or 
[[AppDelegate get].server refreshData] 

लेकिन मुझे यकीन है वहाँ उन है कि लगता है कि यह एक टीम की स्थापना में बुरा डिजाइन है कर रहे हैं रहा हूँ।

3

मुझे इसके लिए बहुत सारे गफ मिलते हैं, लेकिन वैश्विक प्रासंगिकता वाले छोटे डेटा के लिए, मुझे ऐप प्रतिनिधि में रखने में कोई समस्या नहीं है।

डेटा के बड़े टुकड़े एक स्टोर की आवश्यकता है जो स्मृति से बाहर है (कोर डेटा, फाइल सिस्टम, एसक्यूएललाइट, या आपके पास क्या है)।

मेरा पहला ऐप डेटा के बारे में एक छोटा सा डेटा था (एनएसडीई में पाठ, विभिन्न आकारों में यूआईएममेज इत्यादि)। मैंने इसे एक ही स्थान पर रखने के लिए डेटा प्रबंधन सिंगलटन बनाया और अपडेट के लिए सर्वर अनुरोधों को संभाला। यह ठीक काम किया। अगर मुझे पता था कि अब मुझे क्या पता है, तो शायद मैं कोर डेटा सिंक्रनाइज़ेशन रणनीति के बजाय काम करता।

+0

यह वास्तव में निर्भर करता है - मैं एक गेम ऐप लिख रहा हूं और मुझे स्कोर, खिलाड़ियों आदि का प्रबंधन करने के लिए सिंगलटन कक्षा की आवश्यकता है ... इस मामले में सिंगलटन कोर डेटा से बेहतर काम करता है। मैं एक और ऐप लिख रहा हूं जो वास्तव में डेटा स्टोर करता है और ऑनलाइन सामग्री डाउनलोड करता है। इस मामले में, मैं कोर डेटा का उपयोग कर रहा हूँ। – darksky

+1

हाँ, यह भी ठीक है। मैं एंटी-सिंगलटन के रूप में नहीं होने के लिए भी गफ प्राप्त करता हूं। मुझे लगता है कि यह एक अच्छा उपकरण है कि, कई अच्छे औजारों की तरह, दुरुपयोग की संभावना है। –

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