जब मैं अपना एप्लिकेशन चलाता हूं, जो ज़ोंबी सक्षम के साथ एक्सकोड 4.5.1 (एलएलडीबी) डीबगर में एआरसी का उपयोग नहीं करता है, तो मुझे यह त्रुटि दो बार (2) मिलती है - [सुपर डेलोक] (- [NSObject dealloc]) :मैं xcode 4.5 w/o एआरसी के साथ ज़ोंबी त्रुटि से कैसे बचूं?
* - [V2APIClient वर्ग]: deallocated उदाहरण के लिए भेजे गए संदेश 0x9d865c0 * - [V2APIClient वर्ग]: जब मैं xcode 4.4.1 में एक ही एप्लिकेशन को चलाने के deallocated उदाहरण 0x9d865c0
को भेजे गए संदेश (एलएलडीबी) डीबगर, मुझे एक बार त्रुटि संदेश मिलता है (1)। जब मैं एक्सकोड 4.3.2 में उसी एप्लिकेशन के थोड़ा पहले संस्करण चलाता हूं, तो मुझे त्रुटि संदेश बिल्कुल नहीं मिलता है (0)। मैं इसे एक ही/नवीनतम कोड के साथ पुनः प्रयास करूंगा। -
FYI करें यह ठीक इस अन्य पोस्ट है, जो अभी तक उत्तर नहीं किया गया है के रूप में एक ही समस्या हो गया लगता है: -[Foo class]: message sent to deallocated instance on [super dealloc])
मैं एक ही सवाल दो बार reposting से बचने के लिए प्रयास किया, लेकिन मैं आगे बढ़ने के लिए सलाह दी गई थी: https://meta.stackexchange.com/questions/152226/avoiding-asking-a-question-thats-already-been-asked
इसके अलावा, मैं भी सिर्फ एप्पल डेवलपर फ़ोरम में बराबर प्रश्न पूछा: https://devforums.apple.com/thread/171282
अंत में, यहाँ मेरी कक्षा का सार है:
@interface ASIHTTPRequestHandler : NSObject {
id _error;
}
@property (nonatomic,retain) id error;
@end
@implementation ASIHTTPRequestHandler
@synthesize error = _error;
-(id)init
{
self = [super init];
if (self)
{
self.error = nil;
}
return self;
}
-(void)dealloc
{
self.error = nil;
[super dealloc];// this is the line that appears to cause the problems
}
@end
कृपया इस समस्या को हल करने में मेरी सहायता करें। मुझे विश्वास नहीं है कि मैं किसी भी मेमोरी प्रबंधन नियमों का उल्लंघन कर रहा हूं, लेकिन यह त्रुटि अन्यथा इंगित करती है। जब तक मैं इस समस्या को हल नहीं कर सकता तब तक मुझे किसी भी नए कोड में जांच करने में संकोच नहीं होता है।
धन्यवाद, चक
पी.एस.
PanoTourMgrAppDelegate *ptmAppDlgt = [PanoTourMgrAppDelegate getApplicationDelegate];
Settings *settings = ptmAppDlgt.settings;
Identification *identification = ptmAppDlgt.identification;
V2APIClient *v2ApiClient = [[V2APIClient alloc] initWithSettings:settings identification:identification];
NSDictionary *result = [v2ApiClient get_application_status];
BOOL success = [v2ApiClient callWasSuccessful:result];
if (!success)
{
id error = v2ApiClient.error;
NSString *mbTitle = nil;
NSString *mbMessage=nil;
if ([error isKindOfClass:[NSString class]])
{
mbTitle = @"Application version no longer suppported";
mbMessage = (NSString*)error;
[MessageBox showWithTitle:mbTitle message:mbMessage];
}
}
[v2ApiClient release]; // This is the line that indirectly causes the messages above
'[ऑब्जेक्ट बरकरार रखें]; –
समस्या उपर्युक्त कोड का नतीजा होने की संभावना नहीं है, बल्कि आप ऑब्जेक्ट को 'आवंटित' /' init 'कैसे करते हैं और आप अंत में इसे कैसे रिलीज़ करते हैं। जब तक आप कुछ अजीब नहीं कर रहे हैं, तो इसे रिलीज़ करने का एक साधारण मामला होना चाहिए। जबकि H2CO3 का सुझाव मनोरंजक है, मुझे यकीन है कि वह अंधेरे से 'रखरखाव' बयान डालने का सुझाव नहीं दे रहा है, क्योंकि जब तक कि आप अपने भाग्यशाली भाग्यशाली न हों, तो आप ओवर-रिलीज़ के बजाए लीक के साथ समाप्त हो जाएंगे। आपको केवल 'retainCount'' को बढ़ाने के लिए 'retainCount' की उचित रिलीज के द्वारा ऑफ़सेट किया गया है, यह सुनिश्चित करने की ज़रूरत है कि यह सुनिश्चित करने की आवश्यकता है। – Rob