使用ARC按需销毁对象

时间:2012-07-12 13:50:41

标签: objective-c ios automatic-ref-counting

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

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

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

3 个答案:

答案 0 :(得分:12)

只需将引用这些对象的变量设置为nil即可。然后,编译器将在那一刻释放对象,如果没有其他强引用,它们将被销毁。

答案 1 :(得分:3)

当您将引用对象的[release]变量设置为__strong时,ARC会向nil插入一个电话。

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

@end

-(void)destroyChild {
    childViewController = nil;
}

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

答案 2 :(得分:1)

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