我正在创建视图控制器,其中包含要显示的一些信息(图像,按钮,手势,文本等)并将它们添加到滚动中。
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。谢谢你的帮助。
答案 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
方法中发布。
现在,当取消分配对它们的引用时,您的视图控制器将被释放,在这种情况下,它将是应用程序本身或创建控制器的另一个控制器。如果你没有引用它,它会在你退出代码块后立即被释放。