我在问的只是逻辑上的问题。如果先释放池然后释放对象,会从内存中释放对象吗?例如,这是我的代码段:
[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环境下执行。
最佳答案
这样做很好,因为您从未将imageData对象添加到自动释放池中,因此该池不会释放它。如果您已将imageData对象添加到自动释放池中,如下所示:
[[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:strUrl]] autorelease];
额外发行的版本可能会过剩,您的应用可能会崩溃。
您似乎泄漏了
myImage
,因为它从未发布。关于ios - 如果释放对象所属的池后释放对象,可能会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25931110/