已调用 Dealloc 但未释放内存
Dealloc called but memory not freed
我在我的应用程序中使用 Storyboards,我注意到以下内容。 View Controller A 是根 VC,推送 View Controller B,然后后者以模态方式呈现 VCC。当用户按下按钮时,我有一个从 VCC 到 VCA 的 unwind segue。
将日志放在 VCB 和 VCC 的 dealloc 方法上,你会看到它们在展开转场发生时被调用,所以这很好。然而,none 分配的内存在那一刻被释放。这是正常行为吗,内存不会立即释放,而是稍后释放?
我在这里看到 2 种可能性:
您没有一直调用 [super dealloc] 直到 NSObject,因此内存永远不会被释放。 (在非 ARC 代码中,您应该始终在您编写的每个 dealloc 结束时调用 [super dealloc]。)
您启用了 运行 NSZombies,因此调用 dealloc 时实际上并未释放内存。
找到了我自己问题的答案。通过视图控制器 B 和 C,我使用了一堆图像,并且我已经用
加载了它们
[UIImage imageNamed:@"imageName"];
它缓存了我使用过的所有图像以便以后更快地重新加载它们,因此在视图控制器被释放时不会释放该内存。
另一种选择是使用
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"]];
它不缓存图像,然后在解除分配时释放所有内存。但我将使用第一个选项,因为我将通过应用程序频繁使用这些图像。
这个post很有用
我在我的应用程序中使用 Storyboards,我注意到以下内容。 View Controller A 是根 VC,推送 View Controller B,然后后者以模态方式呈现 VCC。当用户按下按钮时,我有一个从 VCC 到 VCA 的 unwind segue。 将日志放在 VCB 和 VCC 的 dealloc 方法上,你会看到它们在展开转场发生时被调用,所以这很好。然而,none 分配的内存在那一刻被释放。这是正常行为吗,内存不会立即释放,而是稍后释放?
我在这里看到 2 种可能性:
您没有一直调用 [super dealloc] 直到 NSObject,因此内存永远不会被释放。 (在非 ARC 代码中,您应该始终在您编写的每个 dealloc 结束时调用 [super dealloc]。)
您启用了 运行 NSZombies,因此调用 dealloc 时实际上并未释放内存。
找到了我自己问题的答案。通过视图控制器 B 和 C,我使用了一堆图像,并且我已经用
加载了它们[UIImage imageNamed:@"imageName"];
它缓存了我使用过的所有图像以便以后更快地重新加载它们,因此在视图控制器被释放时不会释放该内存。
另一种选择是使用
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"]];
它不缓存图像,然后在解除分配时释放所有内存。但我将使用第一个选项,因为我将通过应用程序频繁使用这些图像。
这个post很有用