【问题标题】:Modal view using UIModalPresentationFormSheet stays in memory (ARC)使用 UIModalPresentationFormSheet 的模态视图保留在内存中 (ARC)
【发布时间】:2012-10-16 14:40:38
【问题描述】:

我正在使用 UIModalPresentationFormSheet 演示样式呈现模式视图。

MPMediaItemCollection *albumItem = [self.albums objectAtIndex:index];
AlbumViewController *destination = [[AlbumViewController alloc] initWithAlbum:albumItem];
destination.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:destination animated:NO];

当用户在模态视图之外点击时,它会关闭。但是,它还在内存中,没有释放。

处理这个问题的正确方法是什么?

编辑:AlbumViewController 中似乎有些东西没有被正确释放。我的一个错误。

【问题讨论】:

    标签: objective-c automatic-ref-counting modalviewcontroller


    【解决方案1】:

    是的,这是正确的。 ARC 会在需要时负责释放内存。

    来自here

    ARC 会释放任何不再有强引用的对象。所以要释放一些东西,只需将所有指向它的变量设置为 nil 并确保该对象不涉及任何循环引用。

    【讨论】:

    • “何时需要”由操作系统确定?在调试潜在的内存问题时,这有点糟糕。不能强制释放不再使用的控制器吗?
    • 我不这么认为。你有记忆问题吗?
    • 好的,但是当模态视图控制器关闭时,不应该有任何强引用它,所以它应该被释放,对吧?但当然*destination 是 ARC 下的强引用,所以在这种情况下,我确实认为我有内存问题。
    • 好的,所以当我打开和关闭模态视图控制器 10 次时,我确实有 10 个实时实例,在 Instruments 中清晰可见。
    • destination 只是一个局部变量,在调用 present... 之后不会构成强引用,除非您继续将视图控制器分配给实例变量或其他任何将持有的变量到它上面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2016-06-08
    相关资源
    最近更新 更多