【问题标题】:How to completely unload view controller loaded from nib?如何完全卸载从 nib 加载的视图控制器?
【发布时间】:2009-08-26 19:35:55
【问题描述】:

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

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

【问题讨论】:

    标签: iphone memory


    【解决方案1】:

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

    类似这样的:

    - (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];
    }
    

    话虽如此,我认为您必须检查您的“内存泄漏”不仅仅是系统缓存的东西。如果您可以通过一次又一次地执行相同的序列来持续使用更多内存,那么您就有泄漏。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 1970-01-01
        相关资源
        最近更新 更多