【问题标题】:ARC - popviewController/DismissViewControllerARC - popviewController/DismissViewController
【发布时间】:2013-12-24 16:33:59
【问题描述】:

我对 ARC 有一些疑问。

在 ARC 中: 当使用dismissViewController/popViewController 关闭视图控制器时,它分配的内存会自动释放吗?

当异步 NSURLConnection 正在运行并且在该操作完成之前,viewcontroller 被解除时会发生什么?

谢谢

【问题讨论】:

    标签: ios memory-management automatic-ref-counting viewcontroller


    【解决方案1】:

    当您关闭视图控制器(或弹出它)时,如果您没有对它进行任何强指针,它将被释放(该控制器由导航控制器或呈现视图控制器保留,因此您通常不'在创建并推送或呈现它时不需要指向它的指针)。

    如果当您关闭控制器时 NSURLConnection 正在进行中,并且该控制器是连接的委托(这是通常的情况),则在 connectionDidFinishLoading 或 connectionDidFailWithError 完成之前不会释放控制器。这是因为连接仍然存在,并且它有一个指向其委托的强指针。

    【讨论】:

    • connectionDidFinishLoading或connectionDidFailWithError完成后,强指向的delete会发生什么?
    • @SARANGA,如果没有其他强指针会放出来。
    • 伙计们,如果有人发现这是正确的,请接受这个答案。谢谢。
    【解决方案2】:

    Dismissviewcontroller 将停止显示视图控制器。只有当引用视图控制器的实际变量超出范围时,实际的视图控制器才会在 ARC 下从内存中删除。例如

    ViewControllerType *vc = [[ViewControllerType alloc] init]; // Create it
    [self presentViewController:vc animated:TRUE completion:Nil]; // Present it
    
    
    vc = Nil; // Destroy it, or the method vc was declared inside is out of scope does the same
    

    通常你不会在 vc 仍然显示时执行 vc = Nil

    如果您允许 ViewController 在收到 NSURLConnection 的响应之前关闭,您应该在 NSURLConnection 的响应线程中处理 ViewController 不再存在的情况。但是请记住,ViewController 可能仍在范围内。这确实是一个只能通过仔细查看用例和相关代码才能回答的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 2012-02-11
      • 2014-02-18
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多