4

用 ARC 销毁对象的正确方法是什么?

我想UIViewController在运行时的特定时间销毁一些 s 以及一个持有 AUGraph 的对象。

目前,当我的父 viewcontroller 创建 viewcontroller 对象并将其视图分配给它view时,这些对象显然与父对象保持联系。我想在不需要时销毁这些子视图控制器。

4

3 回答 3

12

只需将引用这些对象的变量设置为nil. 然后编译器将在那个时刻释放对象,如果不存在对它们的其他强引用,它们将被销毁。

于 2012-07-12T13:55:43.970 回答
3

[release]当您将__strong引用对象的变量设置为 时,ARC 将插入调用nil

@interface MyViewController : UIViewController {
    UIViewController *childViewController;
}
...

@end

-(void)destroyChild {
    childViewController = nil;
}

当你有一个 C 风格的对象数组时,也会做同样的事情:设置数组的一个元素来nil释放那里的项目,除非它是__weak/ __unsafe_unretained。如果将子视图控制器保留在 中NSMutableArray,则从数组中删除对象会减少其引用计数。

于 2012-07-12T13:56:21.557 回答
1

通常,您可以通过将对象设置为 nil 来实现此目的。幕后发生的事情是对象被 ARC 释放,然后设置为 nil。这应该完成你想要的。

于 2012-07-12T13:56:48.900 回答