Я программист Java, плохо знакомый с Objective C, поэтому, пожалуйста, будьте осторожны
Я получаю сообщение об ошибке с сообщением EXC_BAD_ACCESS
при вызове release для объекта:
Я читаю документацию и темы на этом сайте, но вижу данные, которые меня смущают
- (void) dealloc {
NSLog(@"dealloc in image Retain count: %i", [image retainCount]);
[image release];//method throwing EXC_BAD_ACCESS
..............
}
количество сохраненных записей: 1
В коде, который вызывает Deloc, у меня есть:
UIImage *scrn = [[UIImage alloc] initWithCGImage:newImage];
NSLog(@"in after instantiation Retain count: %i", [scrn retainCount]);// logs retain count of 1
CGImageRelease(newImage);
Decoder *d = [[Decoder alloc] init];
.....
NSLog(@"in before decoding Retain count: %i", [scrn retainCount]);// logs retain count of 1
decoding = [d decodeImage:scrn cropRect:cropRect] == YES ? NO : YES;
NSLog(@"in after decoding Retain count: %i", [scrn retainCount]); // logs retain count of 2
[d release]; // this line causes invocation of dealloc on the previous code sniplet
[scrn release];
В decodeImage происходит следующее:
- (BOOL) decodeImage:(UIImage *)i cropRect:(CGRect)cr {
NSLog(@"Decoder.mm.decodeImage initial Retain count i : %i retaincount image %i", [i retainCount], [image retainCount]); //logs: Decoder.mm.decodeImage initial Retain count i : 1 retaincount image 0
[self setImage: i];
NSLog(@"Decoder.mm.decodeImage after setting image Retain count i : %i retaincount image %i", [i retainCount], [image retainCount]);//logs: Decoder.mm.decodeImage after setting image Retain count i : 2 retaincount image 2
.......
return [self decode];
}
Есть несколько вещей, которые меня удивляют:
- Из того, что понял, retainCount увеличивается путем вызова retain или создания нового объекта, а не путем присваивания одного var другому, как это делается в self setImage: i]; однако я вижу, что счет увеличивается на 1
- Перед вызовом [d release] зарегистрированное значение retainCount равно 2, в методе dealloc число равно 1
- Если счетчик равен 1, почему я получаю EXC_BAD_ACCESS ???
Редактировать: добавлен дополнительный код по запросу
@implementation Decoder
@synthesize image;
Настройка изображения упоминается в третьем фрагменте кода выше.