Ios UINavigationController推送视图控制器内存管理
我有一个UITableView,其中列出了n个联系人,并且从Table view delegate DidSelectRowatineXpath中,我正在使用UINavigationController pushviewcontroller导航到“Contactview”UIViewController 例如,如果我将第一个联系人导航到Contactview,Live Bytes内存将从1MB增加到3MB。然后,当我点击后退按钮时,会调用viewcontrollerdelloc方法,但内存仍然保持在2.95MB到3MB之间。我的问题是当调用viewcontrollerdelloc方法时,应该释放viewcontroller的内存,对吗?我哪里错了?如果我错了,请告诉我。我正在使用ARC项目Ios UINavigationController推送视图控制器内存管理,ios,objective-c,memory-management,uinavigationcontroller,pushviewcontroller,Ios,Objective C,Memory Management,Uinavigationcontroller,Pushviewcontroller,我有一个UITableView,其中列出了n个联系人,并且从Table view delegate DidSelectRowatineXpath中,我正在使用UINavigationController pushviewcontroller导航到“Contactview”UIViewController 例如,如果我将第一个联系人导航到Contactview,Live Bytes内存将从1MB增加到3MB。然后,当我点击后退按钮时,会调用viewcontrollerdelloc方法,但内存仍然保
提前谢谢 见。。有一件事ARC将在将来的某个地方发布它的内容。它是自动发布的。。如何期望ARC在类消失后进行Gatrbage收集。释放内存可能需要时间。请参阅。。有一件事ARC将在将来的某个地方发布它的内容。它是自动发布的。。如何期望ARC在课堂结束后进行Gatrbage收集将消失。释放内存可能需要时间。是否检查了“重新计数”?这是否显示了您想要的值?您是否检查了重新计数?这是否显示了您想要的值?UIImage为您缓存图像作为优化,因此这是预期的行为 如果您希望确认这种情况,为了安心,您可以强制执行低内存警告(在模拟器的硬件菜单下)。这将使UIImage抛出其缓存 您也可以使用这个私有方法,但是在提交之前当然要将它扔掉
[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
UIImage为您缓存图像作为优化,因此这是预期的行为 如果您希望确认这种情况,为了安心,您可以强制执行低内存警告(在模拟器的硬件菜单下)。这将使UIImage抛出其缓存 您也可以使用这个私有方法,但是在提交之前当然要将它扔掉
[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
您可能在代码的其他地方拥有视图控制器的强引用。你应该确定它是否真的被释放了。。。如果任何其他对象在导航控制器之外有对它的引用,它将不会被释放。尝试覆盖dealloc。(您也可以在ARC项目中重写dealloc,只允许您使用retain count操纵调用。)为了确保是否调用了dealloc,请在该方法中放入一些日志记录或可调试的代码 您可能在代码的其他地方拥有视图控制器的强引用。你应该确定它是否真的被释放了。。。如果任何其他对象在导航控制器之外有对它的引用,它将不会被释放。尝试覆盖dealloc。(您也可以在ARC项目中重写dealloc,只允许您使用retain count操纵调用。)为了确保是否调用了dealloc,请在该方法中放入一些日志记录或可调试的代码 如果来回推动导航,发现内存无限增长,则内存管理有问题即使使用ARC,您也可能已经放弃了内存。您可以使用Instruments中的分配模板来检测它
如果每个堆快照中的静止对象数量几乎恒定,请单击其中一个堆快照中的右箭头按钮,您将看到所有静止对象。查找可能由您创建的对象,选择一个,展开它,然后通过简单的单击选择其内存地址。然后单击扩展细节按钮查看堆栈跟踪,显示分配对象的位置。在这个代码上下文中,我相信您会理解内存被放弃的原因。如果您来回推动导航,发现内存无限增长,则内存管理有问题即使使用ARC,您也可能已经放弃了内存。您可以使用Instruments中的分配模板来检测它
如果每个堆快照中的静止对象数量几乎恒定,请单击其中一个堆快照中的右箭头按钮,您将看到所有静止对象。查找可能由您创建的对象,选择一个,展开它,然后通过简单的单击选择其内存地址。然后单击扩展细节按钮查看堆栈跟踪,显示分配对象的位置。有了这个代码上下文,我相信您会理解为什么您的内存被放弃。是的,它应该这样做。为什么不验证dealloc实际上是b