1

我有一个IBOutlet UIImageView*. ViewController释放 Controller 后(我不再需要它),UIImageView* has retainCount 为 2(代码没有任何保留),即使在释放两次后 [我认为,这完全错误](在 Controllers 中deallocUIImageView内存仍然分配。UIViewController为什么会发生这种情况,我的问题是 - 在 dealloc之后如何完全释放内存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];
}
4

2 回答 2

1

首先看一下这个链接。whentouseretaincount.com
它只是没有说明任何有用的信息。

其次,iOS 在需要内存时会清除 viewController,而不是在您释放 viewController 后立即清除。
您不应该两次释放 imageView,让 viewController 处理它。

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

于 2012-10-24T07:40:19.410 回答
0

UIImageView* 的 retainCount 为 2

你怎么知道的?请不要依赖retainCount。仍然:

1 - 您的IBOutlet参考。

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

所以你去,你的retainCount 2(理论上)。

使用仪器检查您是否有内存泄漏。此外,正如 Frederik 指出的那样,不要使用viewDidUnload,不再需要它。

于 2012-10-24T07:38:48.727 回答