2010-09-16 25 views
6

मैं एक आईफोन गेम बना रहा हूं। मैं आवंटित या रखी गई सभी वस्तुओं को छोड़ना चाहता हूं। dealloc फ़ंक्शन में मैं ऐसी सभी ऑब्जेक्ट्स जारी कर रहा हूं, लेकिन फिर मुझे एहसास हुआ कि कभी-कभी मैं ऑब्जेक्ट्स को रिलीज़ करता हूं जब उन्हें अभी तक आवंटित नहीं किया जाता है। तो मुझे लगा कि मुझे यह जांचने की ज़रूरत है कि क्या retainCount शून्य से अधिक है या इसे रिलीज़ करने से पहले नहीं।मैं कितनी बार आवंटित या बनाए रखा ऑब्जेक्ट जारी करता हूं?

मेरा प्रश्न है:

मैं सिर्फ जाँच करें retainCount शून्य से अधिक है, तो और फिर उसे छोड़ दें?

if([bg retainCount]!=0) 
{ 
    [bg release]; 
} 

या

मैं अपने retainCount

के रूप में यह रूप में कई बार जारी करना चाहिए
while([bg retainCount]!=0) 
{ 
    [bg release]; 
} 

आपकी मदद के लिए धन्यवाद!

+23

'किसी भी वस्तु का retainCount' ** आपके व्यवसाय से कोई भी है **। यह एक डीबगिंग सहायता के रूप में है, लेकिन कुछ भी नहीं। उत्पादन कोड कभी भी इस पर निर्भर नहीं होना चाहिए। – Sven

+9

Btw - नहीं है कि यह कोड सही बनाता है - लेकिन परिभाषा के अनुसार 'retainCount' 0 वापस कभी नहीं कर सकते हैं क्योंकि वस्तु पहले से ही समय है कि ..... – bbum

+0

भी होता है से पुनः आवंटित की जाती किया गया है, का निर्माण और उपयोग करने का प्रयास" विश्लेषण करें "(यानी क्लैंग विश्लेषक)। यह आपको बता सकता है कि आप कहां गलत हो रहे हैं। –

उत्तर

77

-reainCount का उपयोग न करें।

किसी ऑब्जेक्ट की निरंतर बनाए रखने की गणना व्यर्थ है।

आप release बार है कि आप की वजह से वस्तु बनाए रखे जाने की की बिल्कुल एक ही नंबर पर कॉल करना चाहिए। कम नहीं (जब तक आप लीक पसंद नहीं करते) और, निश्चित रूप से, और नहीं (जब तक आप क्रैश पसंद नहीं करते)।

पूर्ण विवरण के लिए Memory Management Guidelines देखें।

+10

आपको उस टैटू कहीं कहीं होना चाहिए था। –

+4

@bbum: rdar: // 8,122,368 (http://openradar.appspot.com/8122368 हम सभी गैर सेब लोगों के लिए) –

+0

मैं retainCount अब तक उपयोग नहीं किया है, लेकिन सोच रहा था कि अगर मैं ऐसा करना चाहिए। इसे साफ़ करने के लिए धन्यवाद :) जब खिलाड़ी खेल में मर जाता है तो मैं एक अग्रभूमि छवि आवंटित कर रहा हूं। अब यदि खिलाड़ी पूरे स्तर को मरने के बिना स्तर को पूरा करता है तो डीलोक में मैं कैसे जांचूं कि मुझे अग्रभूमि जारी करना चाहिए या नहीं। क्या मैं सिर्फ ध्वज का उपयोग करता हूं यह जांचने के लिए कि क्या अग्रगण्य का उपयोग किया गया था या नहीं? – abhinav