1

我知道在这里之前已经回答了一个类似的问题,但我只是想确保我能更好地理解它。这是我的场景...

我有一个返回分配的 UIImageView 的辅助类方法,如下所示。

+(UIImageView *)tableCellButton{
 return [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image"]] autorelease];

}

然后,在我的 UIViewController 方法之一中,我正在使用它。

UIImageView *imageView = [Helper tableCellButton];
imageView.frame = cell.backgroundView.bounds;
imageView.tag = 250;
[cell.backgroundView addSubview:imageView];

我的问题是关于如何释放这个内存。我没有使用自动释放池(除了创建的应用程序),并且该变量不是 iVar/Property(因此在调用 dealloc 时它不会被释放)。在这种情况下,我是否负责在调用后释放内存?自动释放何时发挥作用?谢谢您的帮助!

4

2 回答 2

1

下一次调用autoreleaserelease通过事件循环发送到对象。这将解释alloc您拨打的电话tableCellButton。唯一保留对象的时间是在内部addSubview,它也将处理它自己release的同一个对象。然后,根据上面的代码,您可以检查此对象的内存管理。

于 2010-11-23T20:01:50.103 回答
1

runloop 的每次迭代都有自己的自动释放池。

本质上,可以这样想:

while(1)
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    [someObject doSomething];
    [pool drain];
}
于 2010-11-23T20:04:16.800 回答