我使用Instruments监控应用程序(ARC)的内存使用情况,并发现 当我从导航视图控制器堆栈弹出视图控制器时,会调用其dealloc方法。 但是内存使用量只下降了一点......(比如0.6M),并且仍然比以前高很多。
所以这就是问题所在。我的应用程序的内存使用量不断增加....
如何在视图控制器分配之前将内存开销降低到该值。 或者至少如何释放更多内存。
此外,使用xib(storyboard)时,内存成本似乎要高得多。
我应该在dealloc方法中将数据设置为nil,如someArr = nil吗? 我不知道。有人帮忙!谢谢!!
答案 0 :(得分:0)
您可以尝试使用@autoreleasepool{ }
块,但请注意,内存占用不必一直返回到它开始的位置。一个很大的警告是,如果已经调用dealloc
,则在代码中使用autoreleasepool可能无效,因为VC已经正确释放。
虽然您可以考虑在视图控制器实现中使用的位置,也许在VC的dealloc
实现中。为了确保在调用VC的dealloc时,将立即释放在@autoreleasepool块中接收自动释放的对象。
我的代码片段来自OSX代码:
- (void) dealloc
{
@autoreleasepool {
// End KVO
[self stopObservingIndexPath];
for (NSView* subView in _treeSubViews)
[subView removeFromSuperview];
[_categoryView removeFromSuperview];
[self.view removeFromSuperview];
_treeSubViews = nil;
_categoryView = nil;
}
}
...这是为了通过强行拆除视图层次结构来减少像你这样的足迹。