AppDelegate क्या है और इसका उपयोग कब करना है, मुझे कैसे पता चलेगा?


146

मैं अभी iPhone ऐप पर काम करना शुरू कर रहा हूं। मुझे कैसे पता चलेगा कि मुझे AppDelegate बनाम एक कस्टम वर्ग में सामान रखना चाहिए? क्या पायथन या पीएचपी जैसी किसी अन्य प्रोग्रामिंग भाषा के साथ एक नियम या किसी भी प्रकार की उपमा है जो एक AppDelegate जैसे पैटर्न का उपयोग करता है?

जवाबों:


255

मैं सामान्य रूप से "आपके आवेदन का दिल" शब्द के एंड्रयू के उपयोग से निहित डिजाइन दृष्टिकोण से बचता हूं। मेरे कहने का मतलब यह है कि मुझे लगता है कि आपको केंद्रीय स्थान पर बहुत सी चीजों को टालने से बचना चाहिए - अच्छे प्रोग्राम डिजाइन में सामान्य रूप से "चिंता का क्षेत्र" द्वारा कार्यक्षमता को अलग करना शामिल है।

एक प्रतिनिधि वस्तु एक ऐसी वस्तु है जो उस वस्तु से अधिसूचित हो जाती है जब वह जिस वस्तु से जुड़ी होती है वह कुछ घटनाओं या राज्यों तक पहुँच जाती है। इस मामले में, एप्लिकेशन प्रतिनिधि एक ऐसी वस्तु है जो कुछ राज्यों तक UIApplication ऑब्जेक्ट पहुंचने पर सूचनाएं प्राप्त करता है। कई मामलों में, यह एक विशेष एक से एक ऑब्जर्वर पैटर्न है।

इसका मतलब यह है कि AppDelegate के लिए "चिंता का क्षेत्र" विशेष UIApplication राज्यों को संभाल रहा है। इनमें से सबसे महत्वपूर्ण हैं:

  • applicationDidFinishLaunching: - ऑन-स्टार्टअप कॉन्फ़िगरेशन और निर्माण से निपटने के लिए अच्छा है
  • applicationWillTerminate: - अंत में सफाई के लिए अच्छा है

आप AppDelegate में अन्य कार्यक्षमता डालने से बचना चाहिए क्योंकि वे वास्तव में वहाँ नहीं हैं। ऐसी अन्य कार्यक्षमता में शामिल हैं:

  • दस्तावेज़ डेटा - आपके पास एक दस्तावेज़ प्रबंधक सिंगलटन होना चाहिए (कई दस्तावेज़ अनुप्रयोगों के लिए) या एक दस्तावेज़ सिंगलटन (एकल दस्तावेज़ अनुप्रयोगों के लिए)
  • बटन / तालिका / दृश्य नियंत्रक, प्रतिनिधि विधियों या अन्य दृश्य हैंडलिंग (ApplicationDidFinishLaunching :) में शीर्ष-स्तरीय दृश्य को छोड़कर) - यह कार्य संबंधित दृश्य नियंत्रक कक्षाओं में होना चाहिए।

बहुत से लोग इन चीजों को अपने ऐपडेलगेट में ढकेल देते हैं क्योंकि वे आलसी हैं या उन्हें लगता है कि ऐपडेलगेट पूरे कार्यक्रम को नियंत्रित करता है। आपको अपने AppDelegate में केंद्रीयकरण करने से बचना चाहिए क्योंकि यह ऐप में चिंता के क्षेत्रों को पिघला देता है और स्केल नहीं करता है।


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

2
कभी-कभी हम ऑनलाइन ट्यूटोरियल में कुछ इस तरह देखते हैं: AppDelegate * del = [AppDelegate sharedAppDelegate]; ( डेवलपर देखें ।apple.com/library/ mac/# documentation/ Cocoa/ Conceptual/… ) इसका क्या मतलब है? मैं इसका उपयोग करने के उदाहरण देख सकता हूं, लेकिन मैं वास्तव में इसके पीछे के सिद्धांत को नहीं समझता हूं (इस उदाहरण को देखें: developer.apple.com/library/ios/#samplecode/… )
10:12

27

आपका आवेदन प्रतिनिधि आपके आवेदन का दिल है। यह प्रभावी रूप से आपका "प्रोग्राम कंट्रोलर" है।

एप्लिकेशन डेलिगेट वह क्लास है जो एप्लिकेशन-स्तर के संदेश प्राप्त करता है, जिसमें एप्लिकेशनडिनफिनिश लंचिंग संदेश भी शामिल है जो आमतौर पर अन्य विचारों के निर्माण को आरंभ करने के लिए उपयोग किया जाता है।

जबकि बिल्कुल समान नहीं है कि आप इसे अपने कोको कार्यक्रम के "मुख्य ()" रूटीन के रूप में सोच सकते हैं।


मैं आपको +1 दे रहा हूं क्योंकि AppDelegate में आपके सभी UI कंट्रोलर होने के कारण उन सभी कस्टम क्लासेस को बनाने की तुलना में परेशानी कम है।
रावाल्स

3
@rwols carefull हो, आपकी चिंताओं को अलग करने से क्लीनर कोड के लिए मदद मिलती है और यह डीबग करने के लिए परेशानी का कम है, आपको उन कस्टम क्लास को बनाने के लिए समय निकालना चाहिए और अपने सभी पर्यवेक्षकों को एक फ़ाइल में नहीं डालना चाहिए।
पहिएदार

2

@ शिवम, धन्यवाद।

जो मैं समझता हूं appDelegate, वह Applicationएंड्रॉइड में एक के करीब है। viewDidLoad, viewDidDisappearक्या Android के जीवनचक्र के बराबर है। हर एप्लिकेशन में एक जीवन चक्र होता है, जिसमें कॉल करने से लेकर आने वाले व्यवधानों तक, सूचनाओं को दिखाने तक की जानकारी होती है। यदि इन systemघटनाओं के होने पर आपको कुछ विशेष करने के लिए अपने कोड की आवश्यकता होती है, तो आपको कोड लिखने की आवश्यकता है।

एंड्रॉयड उपयोग हम में onPause, onDestroy, onCreateथोड़े ऐसी प्रणाली ईवेंट प्रबंधित करने के तरीकों को कालबैक।


onPause, onCreateऔर onDestroyएंड्रॉयड के तरीकों अधिक के समान हैं viewDidDisappear, viewDidLoadएक iOS देखें नियंत्रक के जीवनचक्र के तरीके। यदि आपको तुलना करनी है, तो मैं कहूंगा कि Applicationएंड्रॉइड की कक्षा AppDelegateआईओएस के करीब होगी ।
शिवम भल्ला

धन्यवाद, अगर आप मेरे जवाब को बेहतर कर सकते हैं तो कृपया। तुम्हारा पढ़ने के बाद मैं अपना उत्तर हटा दूंगा।
सिद्धार्थ

1

आशा है कि यह थोड़ा और मदद करेगा ...

प्रोग्रामर के लिए इस भाषा में हमेशा एक ही सवाल है - क्या कार्यक्रम एक मुख्य विधि से शुरू होता है? हां, आप इस मामले में सही हैं; IOS ऐप भी एक मुख्य विधि से शुरू होते हैं।
आपका मुख्य वर्ग नीचे दिए गए फ़ंक्शन को कॉल करता है:

 UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

UIApplicationMain कोको टच रन लूप और ऐप इन्फ्रास्ट्रक्चर को बंद करता है जो एक UIApplicationऑब्जेक्ट बनाता है । हमारे एप्लिकेशन को सामग्री की आवश्यकता है ताकि उद्देश्य-सी इसे संभालने के लिए एक प्रतिनिधि का उपयोग करें। इसलिए हम इसे AppDelegate (प्रतिनिधि के रूप में कार्य UIApplication) कहते हैं। हम उस प्रतिनिधि के कुछ वैकल्पिक तरीकों को लागू करते हैं और यह तदनुसार व्यवहार करता है।


कृपया किसी ने मुझे उपरोक्त उत्तर में गलतियां समझने की अनुमति दी है
अनुराग भाकुनी

2
यह भ्रमित लगता है क्योंकि a) आप उचित विराम चिह्न / वर्तनी / व्याकरण का उपयोग नहीं करते हैं, ख) यह ऑफ-टॉपिक है क्योंकि यह वास्तव में मूल पोस्टर द्वारा पूछे गए प्रश्न का उत्तर नहीं देता है।
काई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.