По какой-то причине поведение сохранения / выпуска в следующем коде полностью сбило меня с толку.
selectedImage = [UIImage imageNamed:@"icon_72.png"];
[selectedImage release];
Это должно сломаться, но не . Зачем? Я думал, что imageNamed
самовыпускается автоматически, что означает, что освобождение здесь избыточно и должно прерваться, когда произойдет автоматическое освобождение.
Вот фрагменты, относящиеся к selectedImage из файлов .h и .m:
@property (nonatomic, readonly) UIImage *selectedImage;
@synthesize delegate, selectedImage, spacerBottom, currentIndex;
Другие примечания, это делает перерыв:
selectedImage = [UIImage imageNamed:@"icon_72.png"];
[selectedImage release];
[selectedImage release];
//objc[55541]: FREED(id): message release sent to freed object=0x59245b0
//Program received signal: “EXC_BAD_INSTRUCTION”.
Как делает это:
selectedImage = [UIImage imageNamed:@"icon_72.png"];
[selectedImage release];
[selectedImage autorelease];
//objc[55403]: FREED(id): message autorelease sent to freed object=0x59b54c0
//Program received signal: “EXC_BAD_INSTRUCTION”.
И так делает следующее:
selectedImage = [UIImage imageNamed:@"icon_72.png"];
[selectedImage autorelease];
[selectedImage release];
//objc[55264]: FREED(id): message release sent to freed object=0x592c9a0
//Program received signal: “EXC_BAD_INSTRUCTION”.
И так делает это:
selectedImage = [UIImage imageNamed:@"icon_72.png"];
[selectedImage autorelease];
[selectedImage autorelease];
//objc[55635]: FREED(id): message release sent to freed object=0x5b305d0
//Program received signal: “EXC_BAD_INSTRUCTION”.