यह नहीं बेहतर init के माध्यम से परोक्ष रूप से initWithNibName:
कॉल करने के लिए है । आप बस कुछ बिंदु पर initWithNibName:
पर कॉल करना चाहते हैं। आप बाहरी या आंतरिक रूप से ऐसा कर सकते हैं। कुछ लोग सोचते हैं कि यह आंतरिक रूप से करना बेहतर है। मेरे पास वास्तव में "लेआउट यूटिल" नामक एक कक्षा है जिसे मैं लेआउट से संबंधित सहायक उपकरण रखता हूं ताकि लेआउट से संबंधित कोड के कड़े टुकड़े को लिखने से बच सकें। यहाँ एक UIViewController लोड करने के लिए मेरे कोड है:
+ (id)loadController:(Class)classType {
NSString *className = NSStringFromClass(classType);
UIViewController *controller = [[classType alloc] initWithNibName:className bundle:nil];
return controller;
}
और फिर मैं सिर्फ कर सकते हैं:
MyViewController *c = [LayoutUtil loadController:[MyViewController class]];
यदि आप चाहते हैं, तो आप एक वर्ग के लिए ughhhh एक विधि कहा जाता है जोड़ सकते हैं और वहाँ में यह कह सकते हैं, इससे कोई फर्क नहीं पड़ता। मुद्दा यह है कि इनिट विधि में initWithNibName को कॉल करना बेहतर अभ्यास नहीं है, हालांकि, आप यह सुनिश्चित करना चाहते हैं कि आप इसे UIViewController शुरू करते समय किसी बिंदु पर कॉल करें।
- (id)ughhhh
{
self = [super initWithNibName:@"Myview" bundle:nil];
if (self != nil)
{
}
return self;
}
एक निब फ़ाइल को निश्चित रूप से एक से अधिक बार लोड करने की आवश्यकता हो सकती है। प्रत्येक बार जब आप UIViewController पर initWithNibName को कॉल करते हैं तो xib को लोड करना होगा।
[[NSBundle mainBundle] loadNibNamed:@"nameOfXIBFile" owner:self options:nil];
हर आप इस समारोह आप निब लोड हो रहा है हो जाएगा कहते हैं: लोगों का एक बहुत UIViews है कि इस तरह एक UIViewController का स्वामित्व नहीं होता लोड।
कुछ ऐसे मामले हैं जहां एक निब को कैश किया जा सकता है। एक उदाहरण UITableView होगा - लेकिन तालिका दृश्य इसे अपने स्वयं के कैश लागू करता है। ऑपरेटिंग सिस्टम स्वचालित रूप से कोई कैशिंग नहीं कर रहा है।
init
और initWithNibName:
उस initWithNibName:
से संबंधित हैं स्वचालित रूप से किसी ऑब्जेक्ट पर इनिट कॉल करते हैं।
स्रोत
2012-01-30 05:16:54
+1, बहुत अच्छी तरह से विस्तृत ... – doNotCheckMyBlog
अपने विस्तृत जवाब और तरह सहायता ... – Stanley
बस एक नोट के लिए धन्यवाद: आत्म करने के लिए आवंटित करने के लिए, आप की जरूरत 'init' से शुरू करने के लिए एक विधि है। तो '- (आईडी) initUghhhh – benaneesh