i got encountered with a strange issue relating to memory management in iphone.
i explain it through a example consider a below written piece of code
in XMLParser.h
@interface XMLParser:NSObject/*<NSXMLParserDelegate>*/ {
NSMutableArray *parsedXML;
}
@property (nonatomic, retain) NSMutableArray *parsedXML;
in XMLParser.m if i write my init function like below written form #import "XMLParser.h"
@implementation XMLParser
@synthesize parsedXML;
- (XMLParser *) initXMLParser :(NSString *)repetingTagStr{
self = [super init];
if(self){
self.parsedXML = [[NSMutableArray alloc] initWithCapacity:1];
NSLog(@"%d", [self.parsedXML retainCount]);
[self.parsedXML release];
}
return self;
}
- (void) dealloc {
[parsedXML release];
[super dealloc];
}
@end
NSLog gives retain count as 2 and when after release statement if i try to use it then it gives a crash.
now if i alloc it using NSMutableArray* temp = [[[NSMutableArray alloc]initWithCapacity:1]autorelease]; or self.parsedXML = [NSMutableArray arrayWithCapacity:1]; then it works fine.
i am really very confused now as how autorelease does not give crash and immediate release cause it to crash. is it something to do with accessor methods. Please explain where my concepts are failing in memory management :)