Dealloc打电话但记忆没有被释放

时间:2015-10-24 15:36:10

标签: ios memory-management uiviewcontroller storyboard

我在我的应用程序中使用Storyboard,我注意到以下内容。视图控制器A是根VC,推送视图控制器B,然后视图控制器B呈现模态VCC。当用户按下按钮时,我有从VCC到VCA的放松信号。 将日志放在VCB和VCC的dealloc方法上,看到它们在unwind segue发生时被调用,所以这很好。但是,此时没有分配的内存被释放。这是一种正常行为,内存不会立即释放,而是稍后释放?

2 个答案:

答案 0 :(得分:2)

找到我自己的问题的答案。通过视图控制器B和C我使用一堆图像,并且我已经加载了

[UIImage imageNamed:@"imageName"];

它会缓存我以后用于更快重新加载它们的所有图像,因此在取消分配视图控制器时不会释放该内存。

另一种选择是使用

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"]];

没有缓存图像,然后在释放时释放所有内存。但是我将推出第一个选项,因为我将经常通过应用程序使用这些图像。

这篇文章很有用https://stackoverflow.com/a/17569993/5009180

答案 1 :(得分:1)

我在这里看到两种可能性:

  1. 你没有直接调用[super dealloc]到NSObject,因此永远不会释放内存。 (在非ARC代码中,你应该总是在你写的每个dealloc的末尾调用[super dealloc]。)

  2. 您正在运行NSZombies,因此在调用dealloc时实际上不会释放内存。