ViewController内存管理(以编程方式或使用ib)

时间:2014-09-05 09:09:31

标签: ios objective-c memory-management viewcontroller

我使用Instruments监控应用程序(ARC)的内存使用情况,并发现 当我从导航视图控制器堆栈弹出视图控制器时,会调用其dealloc方法。 但是内存使用量只下降了一点......(比如0.6M),并且仍然比以前高很多。

所以这就是问题所在。我的应用程序的内存使用量不断增加....

如何在视图控制器分配之前将内存开销降低到该值。 或者至少如何释放更多内存。

此外,使用xib(storyboard)时,内存成本似乎要高得多。

我应该在dealloc方法中将数据设置为nil,如someArr = nil吗? 我不知道。有人帮忙!谢谢!!

This image is captured when one view controller is allocated, and still alive after its dealloc method is called.......

1 个答案:

答案 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;
    }
}

...这是为了通过强行拆除视图层次结构来减少像你这样的足迹。

the Apple reference here.