मैंने दोनों को viewDidLoad
और viewDidUnload
दृश्य नियंत्रक के रूप में रखा है।viewDidUnload कोDidLoad से कम बार क्यों कहा जाता है?
लॉग में, मुझे viewDidLoad
viewDidUnload
से अधिक कहा जाता है जब ऐप अलग-अलग .nibs से चलता है।
क्यों?
मैंने दोनों को viewDidLoad
और viewDidUnload
दृश्य नियंत्रक के रूप में रखा है।viewDidUnload कोDidLoad से कम बार क्यों कहा जाता है?
लॉग में, मुझे viewDidLoad
viewDidUnload
से अधिक कहा जाता है जब ऐप अलग-अलग .nibs से चलता है।
क्यों?
viewDidLoad और viewDidUnload एक दूसरे के अनुरूप नहीं है।
ViewDidUnload केवल तभी कॉल किया जाएगा जब आपको स्मृति चेतावनी मिलती है। सिस्टम तब स्वचालित रूप से आपके viewDidUnload को कॉल करेगा।
सामान्य स्थिति में, जब आप एक MyViewController दबाते हैं और इसे पॉप आउट करते हैं। जीवन चक्र इच्छा इस तरह होता है:
init
viewDidLoad
release
इसका मतलब है कि, जब भी आप init और धक्का/एक दृश्य प्रस्तुत करते हैं, एक viewDidLoad बुलाया जाएगा। लेकिन जब आप दृश्य को पॉप करते हैं, तो रिलीज को सामान्य मामले में बुलाया जाएगा और देखेंDidUnload को स्मृति चेतावनी मामले में बुलाया जाएगा।
यह काफी निहित है और ऐप्पल गाइड पर स्पष्ट रूप से यह नहीं बताता है। यहां कुछ संदर्भ दिया गया है: Load and Unload cycle
फिर viewDidUnload और didRecieveMemoryWarning के बीच क्या अंतर है? –
सबसे पहले, एप्लिकेशन को सिस्टम से कम स्मृति चेतावनी प्राप्त होती है। फिर प्रत्येक व्यू कंट्रोलर ने इसे किया है ReceiveMemoryWarning विधि। फिर, यदि व्यू कंट्रोलर अपना विचार जारी करता है, तो यह इसके व्यूडिडउनलोड विधि को कॉल करता है। आप अपने विचारों के लिए आवश्यक अतिरिक्त क्लीनअप करने और पदानुक्रम देखने के लिए इस विधि को ओवरराइड कर सकते हैं। – vodkhang
लोड और अनलोड चक्र के लिंक को फिर से देखें – vodkhang
मुझे लगता है कि उन मामलों में जहां -viewDidUnload
नहीं कहा गया था, दृश्य नियंत्रक जारी किया गया था।
आप और 2 -viewDidLoad
कॉल और 1 '-viewDidUnload' कॉल के साथ।
हो सकता है कि यह भी -dealloc
विधि में एक NSLog
रख दिया और संयुक्त -dealloc
और -viewDidUnload
कॉल की संख्या -viewDidLoad
कॉल की संख्या से मेल खाता है या नहीं।
जब कोई नया दृश्य लोड होता है, तो पुराने दृश्य को पृष्ठभूमि में अभी भी लोड किया जा सकता है। आप व्यूअरपियर के रूप में देख रहे हैं जो मुझे लगता है कि conterpart के रूप में।
मेमोरी चेतावनी के मामले में केवल अनलोड लोड करें।
मुझे आश्चर्य है कि अगर मेरा उत्तर स्वीकार कर लिया गया है, तो मेरे पास +50 repu होगा, है ना? मुझे वह क्यों नहीं मिला? – vodkhang
@ वोदखांग, मेरी गलती। मुझे एहसास नहीं हुआ कि मुझे स्वीकार करें और '50' आइकन पर क्लिक करना होगा। – ohho