在 IBOutlet (UIImageView 之后释放内存)



我在ViewController有一个IBOutletUIImageView*。释放控制器后(我不再需要它),UIImageView* 具有 retainCount 是 2(代码没有任何保留),即使在发布两次后 [我认为,这完全错误](在控制器dealloc中)仍然分配UIImageView内存。为什么会发生这种情况,我的问题是 - 如何在与IBOutletsUIViewControllerdealloc 后完全释放内存?

@interface GRULogInController (){
IBOutlet UIImageView* bgImage;
}
@end
@implementation GRULogInController
....
- (void)viewDidUnload
{
NSLog(@"%d", bgImage.retainCount); // Shows 2 !!!
[bgImage release];
[bgImage release]; // Object releases but memory not freed (It shown in Instruments)
[super viewDidUnload];
}
- (void) dealloc
{
[self viewDidUnload];
[super dealloc];
}

首先看看这个链接。 whentouseretaincount.com
它只是没有告诉任何有用的东西。

其次,iOS 会在需要内存时清除视图控制器,而不是在您释放视图控制器后立即清除。
你不应该释放图像视图两次,让视图控制器处理它。

另一件事是 viewDidUnload 已被弃用,您应该在 dealloc 中执行代码。

UIImageView* 的 retainCount 是 2

你怎么知道?请不要依赖retainCount。还:

1 - 您的IBOutlet参考。

2 - 您的UIView作为对其子 UI 元素的强引用。

所以你去,你的保留计数 2(理论上)。

使用仪器检查是否有内存泄漏。另外,正如弗雷德里克指出的那样,不要使用viewDidUnload,不再需要它了。

最新更新