आपके प्रश्न का संक्षिप्त उत्तर यह है: "जब कार्यक्रम निकलता है।"
main()
फ़ंक्शन शुरू होने से पहले, आपके प्रोग्राम की शुरुआत में स्टेटिक चर आवंटित किए जाते हैं। इसी प्रकार, main()
निकास के तुरंत बाद, उन्हें आपके कार्यक्रम के अंत में रिलीज़ किया जाएगा। यह स्मृति प्रबंधन उद्देश्य-सी रनटाइम द्वारा संभाला जाता है, और यह दृश्यों के पीछे होता है।
यदि आप इस व्यवहार की निगरानी करने की कोशिश कर रहे हैं, तो शायद आपके पास बहुत भाग्य नहीं होगा। उदाहरण के लिए, अगर तुमने किया था एक कस्टम वर्ग में निम्नलिखित हैं और किसी दूसरे वर्ग के एक सदस्य के रूप में स्थिर उस वर्ग का प्रयोग किया:
- (void)dealloc
{
NSLog(@"I am being deallocated");
[super dealloc];
}
आपको यह संदेश दिखाई कभी नहीं होगा लॉग में दिखाई देते हैं। इसके पीछे कुछ कारण हैं। एक, वेरिएबल्स जो NSLog()
की आवश्यकता है, सामान्य शट डाउन प्रक्रिया के हिस्से के रूप में पहले से ही हटा दिया जा सकता है। और दो, क्योंकि रनटाइम सिस्टम dealloc
विधियों को कॉल करने के लिए परेशान किए बिना, शेष शॉट में सभी शेष मेमोरी को आसानी से रिलीज़ कर सकता है।
यदि आपकी कस्टम कक्षा dealloc
विधि में कुछ महत्वपूर्ण है तो यह समस्याग्रस्त हो सकती है। यदि ऐसा है, तो एक कस्टम cleanup
विधि लिखने पर विचार करें जिसे आप प्रोग्राम से बाहर निकलने से ठीक पहले इन ऑब्जेक्ट्स के लिए कॉल करते हैं।
स्रोत
2009-03-19 06:52:31
ओब्जे-सी सीखते समय बस इस प्रश्न में आया। ऐप्पल का सुझाव है कि "क्लास वेरिएबल" जैसी कोई चीज नहीं है और आपने इंटरफ़ेस में जो परिभाषित किया है वह क्लास * विधि * है, जो स्थैतिक चर से अलग है और इस प्रकार कार्यान्वयन में परिभाषित किया जाना चाहिए। स्थैतिक चर कार्यान्वयन * फ़ाइल * के दायरे तक ही सीमित है, कक्षा नहीं। हो सकता है कि यह एक मामूली वक्रोक्ति है लेकिन यह मुझे एक सेकंड के लिए उलझन में: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html#//apple_ref/doc/ uid/TP30001163-CH11-TPXREF118 –