如果我将指针设置为nil或将指针指向另一个对象,自动引用计数是否会释放对象?
例如做类似的事情:
//in .h file
@interface CustomView : UIView
{
UIView *currentView;
}
// in .m file:
-(void)createView1
{
currentView = [[UIView alloc] init];
[self addSubview:currentView];
}
-(void)createView2
{
[currentView removeFromSuperview];
// does the former view get released by arc
// or does this leak?
currentView = [[UIView alloc] init];
[self addSubview:currentView];
}
如果此代码泄漏,我将如何正确声明* currentView?或者我如何让ARC“释放”当前视图?谢谢!
答案 0 :(得分:6)
使用ARC,您无需考虑release/retain
。
由于您的变量将被隐式定义为strong
,因此无需将其设置为NULL
- 它将在分配之前被释放。
我个人虽然喜欢声明属性:
@property (strong, nonatomic) UIView *currentView;
答案 1 :(得分:3)
执行[currentView removeFromSuperview]
后,您应该致电currentView = nil
,ARC将会发布魔法。然后,您可以使用那里的新UIView重新分配currentView
。