如何完全卸载从nib加载的视图控制器?

时间:2009-08-26 19:35:56

标签: iphone memory

我正在编写使用多个视图的iPhone应用程序,每个视图都有自己的控制器。它们使用initWithNibName以编程方式加载:并在切换到其他控制器之前释放,因此一次只能看到一个视图。 释放视图控制器后(我已经检查过调用dealloc)并不是所有内存都被释放。删除控制器时,我会释放所有插座。此外,在控制器的dealloc中将self.view设置为nil并不能解决问题。虽然乐器的泄漏没有显示任何泄漏,但内存消耗会变得更大。

有没有办法用内存中的控制器完全删除这些视图?我想在创建新控制器之前和删除它之后获得相同的可用内存量。

2 个答案:

答案 0 :(得分:2)

您可以覆盖任何类的保留和释放,以便更好地了解保留计数何时高于您的预期。

这样的事情:

- (id) retain
{
    NSLog(@"Retain: Retain count is now %d", self.retainCount+1);
    return [super retain];
}

- (void) release
{
    NSLog(@"Release: Retain count is now %d", self.retainCount-1);
    [super release];
}

当说到这一点时,我认为你必须检查你的“内存泄漏”不仅仅是系统缓存的内容。如果你可以通过一次又一次地执行相同的序列来持续使用更多的内存,那么你就会有泄漏。

答案 1 :(得分:1)

问题现在解决了,它是UIWebView。它保留了一些缓存,没有办法清除它。用UIScrollView替换UIWebView后(用于显示简单的本地页面)问题就消失了。