objective c runtime - variable parameter function - EXC_BAD_ACCESS when calling [obj release]; -


मेरे पास निम्न विधि है:

(शून्य) मेस्टस्ट्रिंग: (NSString *) str1 , ... {

  va_list स्ट्रिंग; NSString * innerText = [[NSString alloc] init]; NSString * tmpStr = [[NSString alloc] init]; यदि (str1) {va_start (तार, str1); जबकि (tmpStr = va_arg (स्ट्रिंग, आईडी)) {innerText = [आंतरिक टेक्स्ट स्ट्रिंगबैफ़िंगिंग स्ट्रिंग: tmpStr]; } Label.text = [str1 stringByAppendingString: innerText]; } [TmpStr रिलीज़];                       

संकेत और प्रतिलिपि -, लेकिन अब के लिए, कोई भी समझा सकता है कि मैं क्यों [आंतरिक टेक्स्ट रिलीज] जोड़ रहा हूं; इस फ़ंक्शन की अंतिम पंक्ति के रूप में, मुझे रनटाइम पर एक EXC_BAD_ACCESS त्रुटि मिलती है?

सबसे पहले, आपका कोड गलत।
जहाँ तक मैं देख सकता हूं कि आप परिणाम को label.text पर निर्दिष्ट करने के लिए स्ट्रिंग्स को जोड़ते हैं।
मुझे लगता है कि label एक इवर है , इसलिए label.text = ... इट कानूनी है। इसके बाद निम्न कार्य करना चाहिए:

  - (शून्य) मेस्टस्ट्रिंग: (NSString *) str1, ... {if (str1) {NSString * tmpStr; Va_list स्ट्रिंग; Va_start (तार, str1); जबकि (tmpStr = va_arg (तार, आईडी)) {str1 = [str1 stringByAppendingString: tmpStr]; } Label.text = str1; }}  

कुछ नोट्स:

  • जब तक आपकी विधि कुछ रिलीज़ नहीं होती है, तब तक आपको नहीं किसी भी इनपुट पैरामीटर को रिलीज़ करना चाहिए।
  • जैसा कि पहले जवाब में कहा गया है, आपको stringByAppendingString: के परिणाम को तब तक नहीं छोड़ना चाहिए जब तक कि आप इसे पहले नहीं रखते हैं।

[अपडेट ]

मैंने जवाब बदल दिया क्योंकि इसमें एक त्रुटि है label.text = str1 को str1 बेशक (यदि उसे रखना है) रखना चाहिए। विशेषकर कॉलिंग कोड को नहीं str1 को बनाए रखना चाहिए, जब तक कि वह स्वयं अपने लिए नहीं रखना चाहती।


Comments