使用ARC销毁对象的正确方法是什么?
我想在运行期间的某些时间销毁一些UIViewController
以及一个持有AUGraph的对象。
目前,当我的父视图控制器创建viewcontroller对象并将其视图分配给它的view
时,这些对象显然与父对象保持活跃。我想在不需要的时候销毁这些儿童视图控制器。
答案 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。这应该完成你想要的。