2012-02-09 10 views
5

मेरे अधिकांश ऐप्स के लिए, मैंने कक्षाओं में सभी तर्क रखा है, कि प्रत्येक व्यू कंट्रोलर को कक्षा भी संदर्भ मिलेगा, या ऑब्जेक्ट को स्वयं बना/रिलीज़ करेगा।क्या ऐपडिलेगेट में अधिकांश तर्क और मॉडल रखना ठीक है?

मैंने अभी आईओएस पर एक पुस्तक पढ़ना शुरू कर दिया है, और लेखक ऐप लॉजिक को ऐप डिलीगेट में रखना पसंद करते हैं, और व्यू कंट्रोलर सिर्फ ऐप को क्रियाओं को रिले करते हैं जो असली काम करते हैं।

क्या लेखक सिर्फ यह कर रहे हैं क्योंकि वे सरल उदाहरण हैं, या यह मुझे कुछ सीखना चाहिए, और मेरे ऐप्स में करना शुरू करना है?

+0

मुझे लावास्लाइडर का जवाब यहां पसंद है http://stackoverflow.com/questions/8421138/importing-appdelegate – Rhubarb

उत्तर

12

पहले, What describes the Application Delegate best? How does it fit into the whole concept?

देखने के आवेदन प्रतिनिधि आवेदन के लिए प्रतिनिधि है। यह वह जगह नहीं है जहां आप नहीं जानते कि कहीं और कहां रखा जाए। यह ग्लोबल्स के लिए भंडारण स्थान नहीं है। यह UIApplication ऑब्जेक्ट के प्रतिनिधिमंडल है। इसलिए एप्लिकेशन को शुरू करने, समाप्त करने, पृष्ठभूमि से स्विच करने और स्विच करने से संबंधित कोड डालने का यह सही स्थान है। एप्लिकेशन जो ओएस में फिट बैठता है, उसके साथ क्या करना है।

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

अधिकतर उदाहरण कोड मॉडल प्रतिनिधि को ऐप प्रतिनिधि में डालता है क्योंकि सरल उदाहरणों के लिए इसे थोड़ा कम कोड की आवश्यकता होती है। लेकिन वास्तविक कार्यक्रमों में यह ऐप को बहुत जटिल बना देता है, और कोड पुन: उपयोग को काफी नुकसान पहुंचाता है। आपका ऐप प्रतिनिधि आमतौर पर बहुत छोटा होना चाहिए, और इसमें अधिकांश विधियां <UIApplicationDelegate> का हिस्सा होनी चाहिए।

+0

मैं अपने कोर डेटा आश्रित ऐप में कहीं भी प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट का उपयोग करना चाहता हूं। मैं किसी भी समाधान को खोजने में असमर्थ हूं जो इसे एक्सेस करने के लिए हर जगह Appdelegate आयात करता है। क्या कोई दूसरा रास्ता है? – Nil

+1

ऐप प्रतिनिधि के अलावा कहीं और 'प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट' को ले जाएं। यह स्वयं का एक सिंगलटन हो सकता है, या इसे उन वस्तुओं में इंजेक्शन दिया जा सकता है जिनकी आवश्यकता होती है। मैं इसे व्यक्तिगत रूप से मॉडल ऑब्जेक्ट्स में इंजेक्ट करता हूं, जिसकी आवश्यकता होती है, और नियंत्रकों को इसे 'व्यू कंट्रोलर सर्विसेज' सिंगलटन के माध्यम से लाने दें। लेकिन यह ऐप प्रतिनिधि नहीं है। –

+0

मेरे पास एक सिंगलटन है जो एपस्टेट (userinfo, सेटिंग्स, अन्य उपयोगकर्ता वरीयताओं) का प्रबंधन करता है। मैंने वहां प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट की एक मजबूत संपत्ति बनाई और इसे 'applicationDidFinishLaunching' कोड में प्रारंभ किया। क्या यह प्रवाह इष्टतम है? मैं यहां पूरे ऐप से प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट का उपयोग कर सकता हूं! – Nil

3

मैं कहूंगा कि ऐसा इसलिए है क्योंकि उदाहरण शायद सरल हैं। किसी भी उचित जटिल, असली दुनिया के ऐप के लिए अपर्याप्त वर्ग जल्द ही अनावश्यक हो जाएगा।

3

तकनीकी रूप से आप इसे कर सकते हैं। प्रोग्रामिंग अभ्यास के मामले में, मत करो। एक बार जब आप ऐपडिलेगेट में बहुत सारी चीज़ें डाल देते हैं, तो यह बहुत गन्दा हो जाएगा। मेरी सलाह इसे अकेले छोड़ देगी।

वैश्विक चर को छोड़कर आपको ऐप डिलीगेट में कुछ भी डालने की आवश्यकता नहीं है। और यदि आपको कभी-कभी इसकी आवश्यकता होती है, तो मेरा सुझाव सिंगलटन पैटर्न जैसे कुछ और उपयोग करेगा। आम तौर पर, वैश्विक चर अच्छे अभ्यास नहीं हैं।

उम्मीद है कि इससे मदद मिलती है।

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