我在我的应用程序中使用Storyboard,我注意到以下内容。视图控制器A是根VC,推送视图控制器B,然后视图控制器B呈现模态VCC。当用户按下按钮时,我有从VCC到VCA的放松信号。 将日志放在VCB和VCC的dealloc方法上,看到它们在unwind segue发生时被调用,所以这很好。但是,此时没有分配的内存被释放。这是一种正常行为,内存不会立即释放,而是稍后释放?
答案 0 :(得分:2)
找到我自己的问题的答案。通过视图控制器B和C我使用一堆图像,并且我已经加载了
[UIImage imageNamed:@"imageName"];
它会缓存我以后用于更快重新加载它们的所有图像,因此在取消分配视图控制器时不会释放该内存。
另一种选择是使用
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"]];
没有缓存图像,然后在释放时释放所有内存。但是我将推出第一个选项,因为我将经常通过应用程序使用这些图像。
答案 1 :(得分:1)
我在这里看到两种可能性:
你没有直接调用[super dealloc]到NSObject,因此永远不会释放内存。 (在非ARC代码中,你应该总是在你写的每个dealloc的末尾调用[super dealloc]。)
您正在运行NSZombies,因此在调用dealloc时实际上不会释放内存。