2010-07-26 13 views
9

मैंने दोनों को viewDidLoad और viewDidUnload दृश्य नियंत्रक के रूप में रखा है।viewDidUnload कोDidLoad से कम बार क्यों कहा जाता है?

लॉग में, मुझे viewDidLoadviewDidUnload से अधिक कहा जाता है जब ऐप अलग-अलग .nibs से चलता है।

क्यों?

+0

मुझे आश्चर्य है कि अगर मेरा उत्तर स्वीकार कर लिया गया है, तो मेरे पास +50 repu होगा, है ना? मुझे वह क्यों नहीं मिला? – vodkhang

+0

@ वोदखांग, मेरी गलती। मुझे एहसास नहीं हुआ कि मुझे स्वीकार करें और '50' आइकन पर क्लिक करना होगा। – ohho

उत्तर

17

viewDidLoad और viewDidUnload एक दूसरे के अनुरूप नहीं है।

ViewDidUnload केवल तभी कॉल किया जाएगा जब आपको स्मृति चेतावनी मिलती है। सिस्टम तब स्वचालित रूप से आपके viewDidUnload को कॉल करेगा।

सामान्य स्थिति में, जब आप एक MyViewController दबाते हैं और इसे पॉप आउट करते हैं। जीवन चक्र इच्छा इस तरह होता है:

init 

viewDidLoad 

release 

इसका मतलब है कि, जब भी आप init और धक्का/एक दृश्य प्रस्तुत करते हैं, एक viewDidLoad बुलाया जाएगा। लेकिन जब आप दृश्य को पॉप करते हैं, तो रिलीज को सामान्य मामले में बुलाया जाएगा और देखेंDidUnload को स्मृति चेतावनी मामले में बुलाया जाएगा।

यह काफी निहित है और ऐप्पल गाइड पर स्पष्ट रूप से यह नहीं बताता है। यहां कुछ संदर्भ दिया गया है: Load and Unload cycle

+0

फिर viewDidUnload और didRecieveMemoryWarning के बीच क्या अंतर है? –

+0

सबसे पहले, एप्लिकेशन को सिस्टम से कम स्मृति चेतावनी प्राप्त होती है। फिर प्रत्येक व्यू कंट्रोलर ने इसे किया है ReceiveMemoryWarning विधि। फिर, यदि व्यू कंट्रोलर अपना विचार जारी करता है, तो यह इसके व्यूडिडउनलोड विधि को कॉल करता है। आप अपने विचारों के लिए आवश्यक अतिरिक्त क्लीनअप करने और पदानुक्रम देखने के लिए इस विधि को ओवरराइड कर सकते हैं। – vodkhang

+0

लोड और अनलोड चक्र के लिंक को फिर से देखें – vodkhang

1

मुझे लगता है कि उन मामलों में जहां -viewDidUnload नहीं कहा गया था, दृश्य नियंत्रक जारी किया गया था।

  1. viewDidLoad: नियंत्रक लोड देखने
  2. viewDidUnload: स्मृति चेतावनी, नियंत्रक अनलोड दृश्य
  3. viewDidLoad: नियंत्रक लोड फिर से देखने
  4. -: नियंत्रक जारी किया जाता है, स्पष्ट रूप से देखने को अनलोड नहीं है

आप और 2 -viewDidLoad कॉल और 1 '-viewDidUnload' कॉल के साथ।

हो सकता है कि यह भी -dealloc विधि में एक NSLog रख दिया और संयुक्त -dealloc और -viewDidUnload कॉल की संख्या -viewDidLoad कॉल की संख्या से मेल खाता है या नहीं।

0

जब कोई नया दृश्य लोड होता है, तो पुराने दृश्य को पृष्ठभूमि में अभी भी लोड किया जा सकता है। आप व्यूअरपियर के रूप में देख रहे हैं जो मुझे लगता है कि conterpart के रूप में।

मेमोरी चेतावनी के मामले में केवल अनलोड लोड करें।

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