【问题标题】:Modal View doesn't release itself after dismiss模态视图在关闭后不会自行释放
【发布时间】:2012-08-15 04:19:30
【问题描述】:

我在关闭模式视图时遇到了一个奇怪的问题。

我呈现这样的模态视图:

 ResepiDetail *detail =(ResepiDetail*)[[ResepiDetail alloc]init];
 [self presentModalViewController:detail animated:YES]; 

然后用后退按钮像这样关闭它:

[self dismissModalViewControllerAnimated:YES];

在此之后,视图会自行关闭并返回到前一个视图,但不会从内存中释放自己。我通过发送通知消息发现了它,并且该视图收到了它。此外,我尝试跟踪 VM 内存分配,但该视图似乎仍在内存中。

我正在使用 ARC,并且将相同的方法用于另一个完美运行的视图。

【问题讨论】:

  • ResepiDetail 中是否有指向呈现它的视图的强指针?
  • 您可以在关闭时将 detail 设置为 nil,例如 detail=nil;

标签: iphone objective-c ios


【解决方案1】:

代码没问题,正如贴出的那样,所以这里有一些关于如何继续的提示:

确定你的视图控制器没有被释放的一个可靠方法是覆盖 dealloc 并记录一些可识别的东西。您仍然可以在 ARC 中执行此操作,只是不要显式调用 super。如果您没有按预期看到日志,那么您就有问题了。

假设您已经确定自己确实有问题,那么问题就变成了查找保留周期。如果问题是 ResepiController 的实例没有被释放,那么您需要寻找...

  1. ResepiController 类之外的任何代码都具有 strong 引用。例如,如果您的班级注册为其他班级的代表,请确保该代表未使用 strong 引用。
  2. 任何可能隐式保留self 的内部块。在您认为应该发布的时候,您的程序中是否有任何块可能引用了您的控制器?

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多