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