Я задаю только логичный вопрос. Будет ли объект выпущен из памяти, если я сначала освобожу пул, а затем отпустите объект? Например, вот мой фрагмент кода:Что может произойти, если я освобожу объект, после выпуска пула, к которому принадлежит этот объект?
[self performSelectorInBackground:@selector(setImage) withObject:nil];
-(void)setImage
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSString *strUrl = @"--some URL--";
NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:strUrl]];
UIImage *myimage = [[UIImage alloc] initWithData:imageData];
[pool release];
[imageData release];
}
Предположим, что фрагмент кода выполняется в соответствии с не-ARC среде.
Как это будет перевыпущено, если я использую autorelease в своем фрагменте кода? Потому что пул отвечает за отправку сообщения о выпуске. Но в моем случае я освобождаю объект после того, как пул выпустил сам. Поправьте меня, если я понял что-то не так. – NSPratik
Если вы добавите 'autorelease' в' imageData', тогда при его создании у него будет счетчик удержания 1, когда пул авторесурсов освободит счет сохранения «imageData', будет уменьшаться, и он будет отменен. Если вы затем попробуете и отпустите «imageData», вы получите крах. Если вы добавите 'autorelease' в' myImage', он будет работать нормально. –
Итак, когда выполнение приходит в _ [release_DataData] _, объект imageData не будет найден и вызовет сбой. – NSPratik