2012-03-11 13 views
6

मैं UINavigationController और UIViewController एस के बारे में सीख रहा हूं। मेरे द्वारा निर्मित सरल ऐप यहां दिया गया है। ध्यान दें कि मैं एआरसी का उपयोग करता हूं।कैसे UINavigationController और UIViewController काम करता है?

मेरे ऐप में एक नेविगेशन नियंत्रक और दो व्यू कंट्रोलर हैं (चलो उन्हें FirstViewController और SecondViewController पर कॉल करें)। जब ऐप लॉन्च किया जाता है तो नेविगेशन नियंत्रक स्टैक पर FirstViewController दबाता है।

FirstViewController में मेरे पास एक बटन है जो छुपाए जाने पर द्वितीय दृश्य नियंत्रक को दबाता है। यहां कुछ कोड है।

FirstViewController.m

-(IBAction)pushSecondViewController 
{ 
    SecondViewController *secondViewController = [SecondViewController alloc]init]; 
    [self.navigationController pushViewController:secondViewController animated:YES]; 
} 

दूसरे दृश्य नियंत्रक में मैं एक बटन जो ढेर से वर्तमान दृश्य नियंत्रक पॉप की है।

SecondViewController.m

-(IBAction)popViewController 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

अब तक तो अच्छा। यहां मेरे प्रश्न हैं:

क्या नेविगेशन नियंत्रक SecondNavigationController के मौजूदा उदाहरण के लिए जांच करता है और यदि ऐसा नहीं है तो यह एक नया बनाता है?

यदि नहीं, तो क्या मुझे यह सुनिश्चित करने के लिए सिंगलटन का उपयोग करना चाहिए कि SeconViewController को दबाए जाने वाले बटन को हर बार एक नया उदाहरण बनाने के बजाय केवल एक उदाहरण बनाया और पुन: उपयोग किया जाए?

उत्तर

4

अपने वर्तमान कोड के साथ, दूसरा दृश्य नियंत्रक नष्ट हो जाएगा जब यह ढेर से पॉप किया जाता है, इसलिए नहीं, नेविगेशन नियंत्रक इसका पुन: उपयोग नहीं करेगा।

यदि आप वास्तव में दूसरे दृश्य नियंत्रक को चारों ओर रखना चाहते हैं, तो इसे पहले दृश्य नियंत्रक की एक मजबूत संपत्ति बनाएं, लेकिन ऐसा तब तक न करें जब तक आपके पास वास्तव में कोई कारण न हो - जिस विधि का आप उपयोग कर रहे हैं वह मानक है और बनाना एक नया व्यू कंट्रोलर आमतौर पर दृश्य नियंत्रकों के साथ बहुत सारी मेमोरी लेने के लिए पसंद किया जाता है जो स्क्रीन पर भी नहीं होते हैं। प्रोसेसर संसाधन की तुलना में मेमोरी अधिक दुर्लभ है, दृश्य नियंत्रक हर समय होता है।

+0

नहीं, मैं दूसरे दृश्य नियंत्रक के आसपास नहीं रखना चाहता हूं। मैं उत्सुक था कि नेविगेशन नियंत्रक कैसे काम करता है। स्पष्टीकरण के लिए धन्यवाद! – ihodo

+0

एक नया विषय शुरू करने के क्रम में।यदि मेरे ऐप में चार व्यू कंट्रोलर कहते हैं, तो पहले और दूसरे व्यू कंट्रोलर ऐप में केवल एक बार उपयोग किए जाते हैं। क्या मुझे उन्हें पॉप करना चाहिए ([self.navigationController popViewControllerAnimated: YES]) नेविगेशन नियंत्रक से स्मृति का उपयोग न करने के क्रम में? – ihodo

+0

नहीं, केवल नेविगेशन स्टैक को ऊपर और नीचे जाने के लिए पुशिंग और पॉपिंग का उपयोग करें। – jrturton

1

मैं jrturton से सहमत हूं और मैं निम्नलिखित दिशानिर्देश जोड़ता हूं।

सबसे पहले, मेरी राय में नियंत्रक को सिंगलेट के रूप में बनाना अच्छा नहीं है।

फिर, आपको UINavigationController "नियंत्रक सरणी" में किसी प्रकार का उदाहरण मौजूद है, तो आपको स्वयं को जांचना होगा।

@property(nonatomic, copy) NSArray *viewControllers 

अंत में, आप अपने नियंत्रक के लिए एक मजबूत संदर्भ बना सकते हैं लेकिन यह बिल्कुल जरूरी नहीं है। एक नए नियंत्रक का निर्माण यह बहुत जल्दी है। इसका एक मजबूत संदर्भ होने के बजाय, यदि कोई हो, तो मैं उस पर प्रस्तुत डेटा कैश करूंगा। उपयोगकर्ता को पहले से डाउनलोड किए गए डेटा की प्रतीक्षा करने से बचने के लिए।

उम्मीद है कि यह मदद करता है।

+0

भी आपको धन्यवाद! – ihodo

+0

आपका स्वागत है। अगर आप चाहते हैं तो upvote :) –

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