【发布时间】:2013-07-01 07:54:02
【问题描述】:
您好,我的项目是基于 ARC 的,我正在使用 UINavigationController 在 ViewController 之间进行转换。我正在使用分析器来分析幕后发生的事情。我注意到,当我推送 ViewController 时,它会为其所有组件分配内存,而当我弹出它时,它不会释放分配的内存。
由于我使用 ARC,我无法实现 dealloc 或释放任何组件。我已经详细分析过了,我的项目没有内存泄漏。
我没有使用任何强大的属性来推送 viewController。这是我推动 ViewController 的方式。
viewController *obj = [[viewController alloc] init];
[self.navigationController pushViewController:obj animated:NO];
有什么线索吗? 我应该怎么做才能释放我消耗的内存。 请指教
【问题讨论】:
-
您可以使用 ARC 实现
dealloc方法。你不能打电话给[super dealloc]。如果您需要清理任何资源,您应该使用dealloc。很可能您的代码中有一个保留周期。在您的代码上运行分析器。 -
实现 dealloc 的目的是什么,因为我无法释放其中的任何组件。
-
您可能需要处理许多其他任务,例如删除通知观察者或清理临时文件等。如果您不需要任何类型的清理,则不要实现
dealloc方法。 ARC 将负责释放对象。但它不会释放卡在保留周期中的东西。 -
@rmaddy 一个问题:在使用 ARC 时,在
viewWillDisappear:中删除通知观察者不是更好吗?在使用 ARC 时,我从未使用过dealloc,而且我的方法一直是在视图不在屏幕上时移除不需要的观察者。因此,viewWillDisappear:. -
假设您将视图控制器 (vc) B 推送到 vc A 上。这将导致在 vc A 上调用
view(Will|Did)Disappear。我仍然希望 vc A 获得任何重要的通知设置它已正确更新到 vc B 被解雇时。但这取决于您的需要。这是一个很好的经验法则——保持平衡。如果你在viewWillAppear中添加了一些东西,那么在viewDidDisappear中删除它。如果您在init中添加某些内容,请在dealloc中删除它。你明白了。
标签: ios objective-c cocoa-touch automatic-ref-counting