2012-02-10 20 views
10

क्या यह एपडिलेगेट को UIViewController में एक इंस्टेंस चर के रूप में रखना ठीक है?आईओएस - उदाहरण चर के रूप में AppDelegate?

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

[appDelegate doSomething]; 

मैं कर सकता:

[appDelegate doSomething]

+2

यदि आप इसे अक्सर एक्सेस कर रहे हैं, तो उस काम को कहीं और क्यों नहीं ले जाएं? – Osiris

उत्तर

12

या आप

-(YourAppDelegate*) app 
{ 
    return (YourAppDelegate*) [[UIApplication sharedApplication] delegate]; 
} 

कर सकता है UIViewController का एक उपवर्ग में - तो करें कि आपके विचार नियंत्रकों के सभी के आधार स्तरीय।

फिर, [self app] काम करता है, और आपको संदर्भ रखने की आवश्यकता नहीं है।

मैं इसे कुछ सामान्य सरल उपयोगिताओं को रखने के लिए करता हूं - आप इसे एक श्रेणी के साथ भी कर सकते हैं।

4

भेद तक पहुँचने के बीच @property (nonatomic, weak) AppDelegate *appDelegate;

की तरह क्योंकि मैं इसे अक्सर लेने के कितने बजाय का उपयोग करने की जरूरत है क्यों मैं पूछ रहा हूँ है पूर्ण अभिव्यक्ति द्वारा प्रतिनिधि (गैर-शारीरिक, कमजोर) संपत्ति के विपरीत मनमाना है। निश्चित रूप से, यदि आप इसे अक्सर कॉल करने जा रहे हैं तो संपत्ति को परिभाषित करके कोड की रेखाएं बचाएं।

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

16

शायद यह ठीक हो सकता है।

लेकिन मेरा पसंदीदा समाधान निम्न है।

अपने AppDelegate.h

+ (AppDelegate *)appDelegate; 

अपने AppDelegate.m

+ (AppDelegate *)appDelegate 
{ 
    return (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
} 

में फिर का उपयोग में आप जहां भी हैं:

AppDelegate* sharedDelegate = [AppDelegate appDelegate]; 

कुछ नोट:

यदि आप साझा डेटा के लिए AppDelegate का उपयोग करते हैं तो आप singletons-appdelegates-and-top-level.html पढ़ सकते हैं।

अगर आप अपने तार्किक आवेदन कार्यप्रवाह के लिए AppDelegate का उपयोग आप पढ़ सकते हैं handling-your-initial-view-controllers-for-iphone/

आशा है कि यह मदद करता है।

+0

'getAppDelegate' ऐप्पल के [नामकरण दिशानिर्देश] का उल्लंघन करता है (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282- BCIGIJJF)।एक बेहतर नाम '+ (ऐपडिलेगेट *) ऐप डिलीगेट होगा;' या '+ (ऐपडिलेगेट *) shareAppDelegate;' –

+0

@AlexPretzlav आपके संपादन के लिए धन्यवाद। –