У меня есть класс со следующим методом инициализации:
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
StateStack* s = [[StateStack alloc] init];
state = s;
[s push:NONE]; //<--EXC_BAD_ACCESS on load here
[s release];
}
return self;
}
И StateStack имеет следующий код инициализации:
- (id)init {
self = [super init];
if (self) {
NSMutableArray* s = [[NSMutableArray alloc] init];
stack = s;
[s release];
NSLog(@"%d",[stack retainCount]);
}
return self;
}
Как ни странно, если я удалю строку NSLog, EXC_BAD_ACCESS перейдет к методу Dealloc StateStack:
- (void)dealloc {
[stack release]; //<--EXC_BAD_ACCESS
[super dealloc];
}
Поиск вокруг, кажется, предполагает, что EXC_BAD_ACCESS вызван чрезмерным выпуском, но я не вижу, как я что-то перевыпускал. Кто-нибудь знает, в чем может быть причина?