在解除视图控制器后调用内存不正确甚至dealloc方法

时间:2014-08-27 08:00:02

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

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

请检查: enter image description here

在几次显示和解除视图控制器之后发生这种情况。其中一些正在被释放,但不是全部。 感谢。

3 个答案:

答案 0 :(得分:5)

取消选中Edit Scheme下的Enable Zombie Objects选项。然后再试一次。

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

我认为此链接有更多信息供您使用 What is NSZombie?

答案 1 :(得分:1)

我想你使用了arc,因此在dealloc中明确释放它可能是有用的。

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

使用dealloc有点像过去(弧前),但它可以帮助你更好地管理内存。 !重要! - >使用arc时,切勿致电[super dealloc];

答案 2 :(得分:0)

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