你好,我的项目是基于ARC的,我正在使用UINavigationController在视图控制器之间进行转换。我正在使用分析工具来分析内存背后发生了什么。我注意到当我推入一个视图控制器时,它会为所有组件分配内存,但当我弹出它时,它并没有释放已分配的内存。
由于我正在使用ARC,因此无法实现dealloc或释放任何组件。我已经进行了详细的分析,并且我的项目中没有内存泄漏。
我没有使用strong属性来推入视图控制器。以下是我推入视图控制器的方式。
viewController *obj = [[viewController alloc] init];
[self.navigationController pushViewController:obj animated:NO];
有什么线索吗?我该怎么做才能释放已经消耗的内存。请给予建议。
dealloc
方法,但是不能调用[super dealloc]
。如果需要清理任何资源,应该使用dealloc
。很可能你的代码中存在保留循环。在你的代码上运行分析器。 - rmaddydealloc
方法。ARC 会负责释放对象,但它无法释放被困在保留循环中的东西。 - rmaddyviewWillDisappear:
中删除通知观察者更好吗?我从未在使用ARC时使用过dealloc
,我的方法始终是在视图不在屏幕上时删除不需要的观察者。因此,使用viewWillDisappear:
。 - swiftcodeview(Will|Did)Disappear
。我仍希望 vc A 能够获得任何重要的通知,以便在 vc B 解散时它能够被正确更新。但这取决于您的需求。这里有一个好的经验法则 - 保持平衡。如果您在viewWillAppear
中添加了某些内容,则在viewDidDisappear
中删除它。如果您在init
中添加了某些内容,则在dealloc
中删除它。您明白了。 - rmaddy