पॉइंटर्स आवंटित स्मृति के पते को पकड़ने के लिए उपयोग किए जाते हैं। जब आप कोको में ऑब्जेक्ट बनाते हैं तो आप स्मृति आवंटित करते हैं और पते को पॉइंटर में संग्रहीत करते हैं।
बूल, चार, int मूल्य को स्टोर करता है।
ताकि आप इसे उपयोग करने के लिए सक्षम होने के लिए है कि याद करने के लिए एक सूचक स्टोर करने के लिए की जरूरत है जब आप एक वर्ग alloc स्मृति आवंटित करता है बनाने के लिए:
NSMutableArray * arr = [[NSMutableArray alloc] init];
कैसे करते सी प्रकार स्मृति से साफ हो सकते हैं?
'सरल' प्रकार ढेर पर आवंटित किए जाते हैं। जब किसी विधि को स्पेस कहा जाता है तो सभी विधि चर (और पैरामीटर और रिटर्न एड्रेस जैसे कुछ अन्य सामान) को पकड़ने के लिए स्टैक पर आवंटित किया जाता है। तो ढेर बढ़ता है। एक बार विधि स्टैक घट जाती है और विधि द्वारा उपयोग की जाने वाली जगह अब पुनः दावा की जाती है - इसलिए हाँ सरल प्रकार 'साफ हो जाएंगे'।
यह वास्तव में लगता है की तुलना में यह बहुत आसान है। अपनी जिज्ञासा को पूरा करने के लिए अधिक जानकारी के लिए wikipedia Stack entry - section Hardware stacks पर एक नज़र डालें।
जब आप स्मृति आवंटित करते हैं तो स्मृति को ढेर पर आवंटित किया जाता है। आपके आवेदन के पूरे निष्पादन के लिए हीप है। एक बार जब आप एक ढेर पर स्मृति आवंटित कर लेते हैं तो आपको उस स्मृति का पता मिलता है - आप इस पते को पॉइंटर्स में संग्रहीत करते हैं। सूचक सिर्फ एक चर है जो स्मृति पता संग्रहीत करता है।
जब आपकी विधि वापस आती है तो आपको विधि के भीतर घोषित आपके 'सरल' चरों तक पहुंच नहीं है (जैसे BOOL, int, char और so) लेकिन ढेर पर स्मृति अभी भी वहां है। बशर्ते आपके पास अभी भी स्मृति का पता है (उदा। सूचक) आप इसे एक्सेस कर सकते हैं।
'सरल' प्रकार के उदाहरण चर के बारे में क्या (संपादित करें: वस्तु के अंदर?)?
जब आप ऑब्जेक्ट बनाते हैं (हम यहां उद्देश्य सी और कोको के बारे में बात कर रहे हैं) और आवंटित करते हैं कि आप पूरे ऑब्जेक्ट के लिए स्थान आवंटित करते हैं।ऑब्जेक्ट का आकार उसके सभी चर का आकार है (सुनिश्चित नहीं है कि obj-c अन्य सामान जोड़ता है)। तो उदाहरण चर आपके ढेर पर आपकी ऑब्जेक्ट मेमोरी का हिस्सा हैं। जब आप ऑब्जेक्ट को रिलीज़/डिलीट करते हैं तो इसकी मेमोरी पुनः प्राप्त की जाती है और अब आपके पास ऑब्जेक्ट के अंदर संग्रहीत चरों तक पहुंच नहीं होती है (ओबीजे-सी में आप रिलीज कॉल करते हैं, प्रत्येक ऑब्जेक्ट रेफरेंस गिनती रखता है, जब रेफरेंस गिनती 0 ऑब्जेक्ट को डिलीकेट किया जाता है - ढेर पर स्मृति पुनः दावा किया जाता है)।
आपके उत्तर के लिए धन्यवाद। यह मुझे अब पूछता है, सी प्रकार कैसे स्मृति से साफ हो जाते हैं? क्या यह उद्देश्य-सी हुड के तहत किया जाता है? – Meroon
ऑब्जेक्ट का इंस्टेंस चर सभी ऑब्जेक्ट की मेमोरी के भीतर निहित हैं। जब वस्तु की स्मृति मुक्त हो जाती है तो वे सभी गायब हो जाएंगे। ऑब्जेक्ट-प्रकार चर के साथ अंतर यह है कि वे पॉइंटर्स हैं, जिसका अर्थ है कि चर स्वयं ही स्मृति में किसी स्थान पर इंगित करता है। यहां तक कि अगर पॉइंटर वैरिएबल गायब हो जाता है, तो जिस स्मृति को इंगित करता है वह अभी भी आवंटित होता है। – Chuck
कभी-कभी हेडर फाइलों में यह न भूलें, ऐप्पल ने संरचनाओं के लिए टाइपपीफ सेट किए हैं जहां आप हमेशा उन्हें पॉइंटर के साथ संदर्भित करते हैं। उस स्थिति में नाम "रेफरी" में समाप्त होता है। जैसे CGImageRef जो CGImage * का टाइपपीफ है। जब आप देखते हैं कि आप वैरिएबल नाम पर अपना * नहीं डालते हैं। – U62