【问题标题】:Memory not being released right even dealloc method is called after dismissing view controller即使在关闭视图控制器后调用了 dealloc 方法,内存也没有被正确释放
【发布时间】:2014-08-27 08:00:01
【问题描述】:

我正在做的是在后台创建大量 UIView 并将它们保存在 NSMutableArray 中以供以后使用。但是当我关闭视图控制器时,我检查了 Xcode 中的内存,似乎有些内存没有被释放。我检查了;视图控制器正在被释放。

请检查:

这发生在多次显示和关闭视图控制器之后。其中一些正在被释放,但不是全部。 谢谢。

【问题讨论】:

  • 你的项目中是否启用了 Zombie?
  • 是的,已启用。 @学生

标签: ios objective-c memory-management uiview uiviewcontroller


【解决方案1】:

取消选中编辑方案下的Enable Zombie Objects 选项。然后再试一次。

僵尸是一个已被释放的对象,但对它的引用仍然存在并且消息仍在发送给它

我认为此链接为您提供了更多信息 What is NSZombie?

【讨论】:

  • 哇!谢谢。我不知道。
【解决方案2】:

我想你使用 arc,所以在 dealloc 中显式释放它可能会很有用。

-(void)dealloc {
    for(UIView *vw in self.arrayOfViews) {
        vw = nil;
    }
    self.arrayOfViews = nil;
}

使用 dealloc 有点像过去(弧前),但它会帮助您更好地管理内存。 !重要的! --> 使用 arc 时永远不要调用[super dealloc];

【讨论】:

    【解决方案3】:

    在 dealloc 方法中释放数组中的所有视图。

    在你的控制器 dealloc 方法中调用下面的方法

    - (void)releaseViewArray
    {
    // Releasing views in the array 
        for (UIView *view in _viewArray) {
            [view release];
        }
    // Releasing the array that holding the views
      [_viewArray release];
    }
    

    【讨论】:

      猜你喜欢
      • 2014-05-14
      • 2017-06-07
      • 2013-12-15
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 2016-01-24
      相关资源
      最近更新 更多