我在IBOutlet
中有一个UIImageView*
ViewController
。在释放Controller之后(我不再需要它),UIImageView
* keepCount为2(代码没有任何保留),甚至在释放两次之后[我认为,这完全错误](在Controllers中{ {1}})dealloc
内存仍然分配。为什么会发生这种情况,我的问题是 - 如何在UIImageView
与UIViewController
取消IBOutlets
之后完全释放内存?
@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];
}
答案 0 :(得分:1)
首先来看看这个链接。 whentouseretaincount.com
它只是没有告诉任何有用的东西。
其次,iOS在需要内存时清除viewControllers,而不是在释放viewController后立即清除它 你不应该释放imageView两次,让viewController处理它。
另一件事是不推荐使用viewDidUnload,而应该在dealloc中执行代码。
答案 1 :(得分:0)
UIImageView *的retainCount为2
你怎么知道的?请不要依赖retainCount
。仍然:
1 - 您的IBOutlet
参考。
2 - 您的UIView
作为其子UI元素的强引用。
所以你去了,你的retainCount 2(理论上)。
使用仪器检查是否有内存泄漏。此外,正如Frederik指出的那样,不要使用viewDidUnload
,不再需要它了。