视图控制器的内存管理

时间:2012-09-03 19:00:25

标签: ios memory-management

我正在创建视图控制器,其中包含要显示的一些信息(图像,按钮,手势,文本等)并将它们添加到滚动中。

productsVCs = [[NSMutableArray alloc] init];

for (int i = 1; i <= [self.products count]; i++) {
    productsSingle *single = [[productosSingle alloc] init];
    single.view.frame = CGRectMake(x, y, 200, 148);
    single.delegate = self;
    [single setInfo:[self.products objectAtIndex:i-1]];
    [scroll addSubview:single.view];
    [productsVCs addObject:single];
}

正如你所看到的,我正在用我正在分配的这些视图控制器做三件重要事情,我写了我认为让ARC释放这些对象所需要的东西。

1)设置代理。 - 我必须将委托设置为nil吗?

2)将视图添加为子视图。 - 从superview移除?

3)将控制器添加到阵列。 - 从数组中删除?

我的问题是,这些视图控制器何时解除分配?使用ARC。谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

当您的ViewController(具有滚动视图)将被解除分配时,将释放对象productsSingle

ARC在编译时工作,因此ARC会为您插入对象上release方法的调用。当您编译项目时,ARC会像这样插入对release方法的调用:

[single setInfo:[self.products objectAtIndex:i-1]];
[scroll addSubview:single.view];
[single release]; //ARC inserts this line

答案 1 :(得分:0)

如果您使用ARC,则无需担心释放对象,因为ARC会为您执行此操作。您仍然可以在控制器中设置强保持的实例变量,以便在viewDidUnload方法中发布。

现在,当取消分配对它们的引用时,您的视图控制器将被释放,在这种情况下,它将是应用程序本身或创建控制器的另一个控制器。如果你没有引用它,它会在你退出代码块后立即被释放。

Here's a little guide on using ARC