2011-09-01 15 views
7

मैं विभिन्न दृश्य नियंत्रकों के बीच डेटा साझा करने के लिए "वैश्विक बाल्टी" के रूप में ऐप प्रतिनिधि का उपयोग कर रहा हूं। आम तौर पर मैं कुछ इस तरह करते हैं:आईओएस साझाकरण 'वैश्विक डेटा' दृश्य नियंत्रकों

My_AppDelegate *appDelegate = (My_AppDelegate *)[[UIApplication sharedApplication] delegate]; 

और फिर, मैं AppDelegate में डेटा छड़ी होता है, और किसी अन्य दृश्य नियंत्रक के साथ AppDelegate से डेटा लेने। किसी भी तरह, यह बेकार और अनुचित लगता है (हालांकि यह काम करता है)।

क्या कोई बेहतर तरीका है? क्या मैं किसी प्रकार के वैश्विक साझाकरण क्षेत्र पर "श्रोता" सेट अप कर सकता हूं, अगर कोई वहां डेटा तत्व चिपकता है, तो किसी अन्य ऑब्जेक्ट को यह जानने के लिए 'कॉल-बैक' मिलेगा कि किसी के पास डेटा तैयार है?

जावा में हम इसे ऑब्जर्वर/ऑब्जर्जेबल क्लास के साथ करते थे - हो सकता है कि ऐसा कुछ हो या आईओएस में बेहतर हो?

उत्तर

3

एक क्लीनर, हालांकि यह आवश्यक नहीं है, ऐसा करने का तरीका एक सिंगलटन वर्ग बनाना है, उदा। AppData, जिसे आप विभिन्न तरीकों से एक्सेस कर सकते हैं, और जो आपके सभी अन्य वर्गों के लिए उपलब्ध होगा। ऐप प्रतिनिधि सामग्री से आपकी ऐप-विशिष्ट सामग्री को अलग करने का लाभ यह है। आप वर्ग इस तरह से परिभाषित करें:

 
@interface AppData : NSObject 

// Perhaps you'll declare some class methods here... 

@end 

एक आम बात मैं कर उपयोग करने के लिए इस तरह के एक वर्ग पर वर्ग पद्धतियां निर्धारित, उदाहरण के लिए, मान, या एप्लिकेशन-विशिष्ट स्थिरांक या अन्य सिंगलटन वस्तुओं सेटिंग है। बहुत सारी संभावनाएं हैं।

अंत में, आप केवल कक्षा विधियों के साथ बहुत कुछ कर सकते हैं, कि आप [AppData theMethod] जैसे कुछ कॉल करेंगे। बस याद रखें कि क्लास विधि के अंदर पहुंचने के लिए self नहीं है।

इसे एक कदम आगे लेना, आप ऐपडाटा कक्षा के लिए इवर को परिभाषित कर सकते हैं और फिर ऐपडाटा के सिंगलटन इंस्टेंस को प्रबंधित कर सकते हैं। कक्षा विधि का प्रयोग करें, उदा। +sharedInstance, सिंगलटन को एक हैंडल प्राप्त करने के लिए जिस पर आप मेहोड्स को कॉल कर सकते हैं। उदाहरण के लिए, [[AppData sharedInstance] someMethod:myArgument]+sharedInstance का आपका कार्यान्वयन हो सकता है जहां आप सिंगलटन के वास्तविक निर्माण को प्रबंधित करते हैं, जिस पर विधि अंततः लौटती है।

मुझे यकीन नहीं है कि मैं इस दृष्टिकोण को "सर्वोत्तम अभ्यास" कहूंगा, लेकिन मुझे यह पैटर्न काफी आसान पाया गया है।

+0

हाँ, मैं सिंगलेट के बारे में भूल गया, और मैं उन्हें हर समय जावा में उपयोग करता हूं .. मैं इसे आज़माउंगा .. – geekyaleks

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