关于IPhone内存管理(自动释放)的说明
我知道以前也有人回答过类似的问题,但我只是想确保我能更好地理解它。这是我的场景 我有一个助手类方法,它返回一个分配的UIImageView,如下所示关于IPhone内存管理(自动释放)的说明,iphone,memory-management,autorelease,Iphone,Memory Management,Autorelease,我知道以前也有人回答过类似的问题,但我只是想确保我能更好地理解它。这是我的场景 我有一个助手类方法,它返回一个分配的UIImageView,如下所示 +(UIImageView *)tableCellButton{ return [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image"]] autorelease]; } 然后,在我的一个UIViewController方法中,我使用它 UIImageView *imag
+(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/属性(因此在调用dealloc时它不会被释放)。在这种情况下,我是否负责在调用后释放内存?自动释放何时起作用?谢谢你的帮助 调用
autorelease
将导致release
下次通过事件循环发送到对象。这将解释您在tableCellButton
中进行的alloc
调用。对象被保留的唯一其他时间是在addSubview
内部,该视图还将处理同一对象自身的release
。然后,根据上面的代码,您将签出此对象的内存管理。运行循环的每个迭代都有自己的自动释放池
本质上,可以这样想:
while(1)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[someObject doSomething];
[pool drain];
}
在这里看到这个问题,关于。希望这能给你一些启示。您永远不必
释放和自动释放的对象。
只有在按下按钮期间创建的“事件”中,或者只要单元格,该事件才会持续存在。backgroundView
持续存在(addSubview
保留。)就在释放的右侧。。。因此,我的应用程序中唯一的自动释放池是驻留在main中的池。既然如此,那么这是否会导致泄漏,或者当ViewController清理表格和单元格时,该对象是否会被发送释放?感谢您的回复!我还找到了iOS的内存管理文档(不知道我以前是怎么错过的)。当应用程序运行时,是否为每个事件创建了一个自动释放池,或者在main中只有一个全局池?每个事件。这意味着,当事件完成时,自动释放池被清空,并创建一个新池。在main中有一个自动释放池,但这基本上是程序结束前的最终捕获。