使用故事板实例化控制器的释放

时间:2014-04-17 18:12:01

标签: ios objective-c memory-management uiviewcontroller automatic-ref-counting

我使用instantiateViewControllerWithIdentifier实例化一个viewcontroller。当我在ARC设置中将 nil 分配给VC变量时,我是否必须完全释放它?故事板还是会保留它?

我使用presentViewController以模态方式呈现viewcontroller,然后在vc内解除它。但是,我没有看到调用vc的dealloc方法。

更新

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:NULL];
RViewControllerEx *viewController = (RViewControllerEx *)[sb instantiateViewControllerWithIdentifier:@"SB_RDVC"];
[self presentViewController:viewController animated:YES completion:nil];
  • 我在-dealloc方法中使用NSLog来确定它是否被调用
  • 我正在使用局部变量并且它不会立即解除分配

2 个答案:

答案 0 :(得分:0)

您还没有提供足够的信息。你在用ARC吗?您是否使用局部变量来保存指向VC或实例变量的指针?

你怎么断定模态VC的dealloc没有被调用?

如果使用强大的局部变量实例化VC,然后调用presentViewcontroller:animated:completion:,则呈现视图控制器将在显示VC时保持对VC的强引用。 (您需要使用强大的局部变量,否则新创建的VC将在您创建后立即解除分配。

一旦模态被解除,呈现视图控制器将清除它的强引用,并且应该取消分配模态。

答案 1 :(得分:0)

Dealloc没有立即被召唤。使用ARC,系统将自动清理在需要时不再使用的视图。

在您的情况下,一旦视图被解除,它将一直存在,直到系统需要空间。

根据您在dealloc中尝试/需要做的事情,有一些解决方案(如有兴趣可以发布您的需求)