2009-05-06 7 views
14

अच्छी तरह से मुझे पता है कि ऐप प्रतिनिधि क्या करता है। इसमें कुछ अच्छी विधियां हैं -प्लिकेशंसडिफफिशिश लॉन्चिंग जिसे ऐप लॉन्च करने के बाद बुलाया जाएगा, और इसी तरह। लेकिन वास्तव में वह क्या है? क्या यह कुछ ऑब्जेक्ट UIAplplicationMain फ़ंक्शन में तत्काल है?आवेदन प्रतिनिधि का सबसे अच्छा वर्णन क्या है? यह पूरी अवधारणा में कैसे फिट है?

और यह कैसे काम करता है मेरे एप्लिकेशन में हर वर्ग कि अनुप्रयोग प्रतिनिधि वस्तु की पहुंच न हो? क्या नेट पर कोई अच्छा ग्राफ है जो इन रिश्तों को देखता है?

उत्तर

34

कोको में घटनाओं, इस तरह के कम स्मृति के रूप में है कि पूरे आवेदन को प्रभावित करता है के लिए एक आवेदन विस्तृत कॉलबैक वस्तु, के रूप में कार्य करता है, एक प्रतिनिधि एक वस्तु है कि एक और वस्तु defers है व्यवहार के सवाल पर करने के लिए और अपने राज्य में बदलावों के बारे में सूचित करता है। उदाहरण के लिए, UITableViewDelegate प्रश्नों के उत्तर देने के लिए जिम्मेदार है कि UITableView को व्यवहार कब किया जाना चाहिए या पंक्तियों को फिर से व्यवस्थित किया जाना चाहिए। यह वह वस्तु है जिसे UITableView पूछता है जब यह जानना चाहता है कि एक विशेष पंक्ति कितनी उच्च होनी चाहिए। मॉडल-व्यू-कंट्रोलर प्रतिमान में, प्रतिनिधि नियंत्रक हैं, और कई प्रतिनिधियों के नाम "नियंत्रक" में समाप्त होते हैं।

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

UIApplicationDelegate हर जगह एप्लिकेशन में से सख्ती से उपलब्ध नहीं है। सिंगलटन यूआईएप्लिकेशंस ([यूआईएप्लिकेशंस साझा अनुप्रयोग] है), और इसके माध्यम से आप इसके प्रतिनिधि को पा सकते हैं। लेकिन इसका मतलब यह नहीं है कि ऐप में प्रत्येक ऑब्जेक्ट के लिए सीधे ऐप प्रतिनिधि से बात करना उचित है। आम तौर पर, मैं डेवलपर्स को ऐप प्रतिनिधि से यादृच्छिक वस्तुओं से बात करने से हतोत्साहित करता हूं। सिंगलटन, एनएसएनोटिफिकेशन, या अन्य प्रतिनिधि वस्तुओं के माध्यम से हल की जाने वाली अधिकांश समस्याओं को हल किया जाता है।

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

+1

अंतर्दृष्टि के लिए धन्यवाद, रोब! सुनिश्चित करें कि आप एक शीर्ष सेब इंजीनियर नहीं हैं? ;) – Thanks

3

ऑब्जेक्ट इस फैशन में तत्काल है;

मुख्य फ़ंक्शन info.plist में मुख्य निब सेट के लिए दिखता है। निब के पास ऐप प्रतिनिधि के रूप में है जो कुछ कक्षा में सेट है जिसे यूआईप्प्लिकेशन डिलेगेट्स और इसके आवश्यक तरीकों को लागू करना होगा। ऐप प्रतिनिधि तब कुछ व्यू कंट्रोलर लोड करता है।

यह आदि