나는 논리적 인 질문만을하고 있습니다. 풀을 먼저 풀어서 개체를 놓으면 개체가 메모리에서 해제됩니까? 개체를 풀면 개체가 속한 풀을 해제 한 후 어떤 일이 발생할 수 있습니까?
-(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];
}
[self performSelectorInBackground:@selector(setImage) withObject:nil];
는 코드가 아닌 ARC 환경에서 실행하는 것으로 가정합니다 : 예를 들어, 다음은 내 코드입니다.
내 코드 조각에 autorelease를 사용하면 어떻게 되나요? 왜냐하면 풀은 해제 메시지를 보내는 책임이 있기 때문입니다. 하지만, 내 경우에는 수영장 풀어 놓은 후에 개체를 놓습니다. 내가 틀린 것을 이해하면 나를 바로 잡아라. – NSPratik
'imageore'에'autorelease'를 추가하면, 이미지를 생성 할 때 자동 회수 풀이'imageData'의 보유 수를 감소시키고 할당이 해제 될 때 보유 수는 1이됩니다. 그런 다음'imageData'를 시도하면 충돌이 발생합니다. 'myImage'에'autorelease'를 추가하면 잘 동작합니다. –
그래, _ [imageData release] _가 실행되면 imageData 객체가 발견되지 않고 충돌이 발생합니다. – NSPratik