我在问的只是逻辑上的问题。如果先释放池然后释放对象,会从内存中释放对象吗?例如,这是我的代码段:



[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/

10-12 00:27
查看更多