【问题标题】:Memory not being released right even dealloc method is called after dismissing view controller即使在关闭视图控制器后调用了 dealloc 方法,内存也没有被正确释放
【发布时间】:2014-08-27 08:00:01
【问题描述】:
我正在做的是在后台创建大量 UIView 并将它们保存在 NSMutableArray 中以供以后使用。但是当我关闭视图控制器时,我检查了 Xcode 中的内存,似乎有些内存没有被释放。我检查了;视图控制器正在被释放。
请检查:
这发生在多次显示和关闭视图控制器之后。其中一些正在被释放,但不是全部。
谢谢。
【问题讨论】:
标签:
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];
}