【问题标题】:ObjC: is an object released IMMEDIATELY when no one references it?ObjC:当没有人引用一个对象时,它会立即释放吗?
【发布时间】:2015-09-16 07:07:31
【问题描述】:

我遇到了一个视图控制器的问题,它已被解除且未引用但仍在内存中,我只是想知道当没有人引用它时,该对象何时真正在内存中释放?

我过去测试的方式是我从 Facebook 安装了 PVC 工具,并在呈现视图控制器时使用它来打印视图层次结构,在它被关闭后,我确保没有人引用它并暂停执行所以我可以从之前的 PVC 工具中po 视图控制器的内存地址,但我仍然可以在那里看到视图控制器实例。

谢谢!

【问题讨论】:

    标签: ios objective-c memory-management uiviewcontroller


    【解决方案1】:

    您似乎对被释放和被从记忆中清除感到困惑。当类被销毁时,它所占用的内存不会被清零,就像你在文件系统中删除文件一样,磁盘块也不会被清零。

    这只会占用太多时间,而且几乎没有什么好处。

    被释放只是意味着该类占用的内存现在可以重新使用。

    查看类是否被销毁的一种方法是在dealloc方法中添加日志:

    - (void)dealloc
    {
        NSLog(@"I'm being destroyed");
    }
    

    【讨论】:

    • 正是我的意思,很抱歉造成混乱;但是你的意思是如果调用dealloc,即使在内存中数据也不再存在,因为它被“销毁”了?
    • 对不起,我刚刚意识到,因为在ARC中你不需要调用release,所以系统会为你处理dealloc,所以在这种情况下,即使调用dealloc,数据可能还记得吗?
    • 是的;对象被销毁后,数据仍会完好无损地存在。它没有归零。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2014-11-26
    • 2012-11-05
    • 2013-12-12
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    相关资源
    最近更新 更多