ARC - popviewController / DismissViewController

时间:2013-12-07 07:30:40

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

我对ARC有些怀疑。

在ARC中: 当使用dismissViewController / popViewController解除viewcontroller时,它的分配内存会自动释放吗?

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

谢谢

2 个答案:

答案 0 :(得分:1)

当您关闭视图控制器(或弹出它)时,如果您没有向它发出任何强指针(该控制器由导航控制器或呈现视图控制器保留,那么它将被解除分配)在创建并推送或呈现它时,需要指向它的指针。

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

答案 1 :(得分:0)

Dismissviewcontroller将停止显示视图控制器。当引用视图控制器的实际变量超出范围时,实际视图控制器将仅从ARC下的内存中删除。 E.g。

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

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