如果我将指针设置为nil,自动引用计数是否释放对象?

时间:2011-11-27 13:26:41

标签: ios cocoa-touch automatic-ref-counting

如果我将指针设置为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“释放”当前视图?谢谢!

2 个答案:

答案 0 :(得分:6)

使用ARC,您无需考虑release/retain

由于您的变量将被隐式定义为strong,因此无需将其设置为NULL - 它将在分配之前被释放。

我个人虽然喜欢声明属性:

@property (strong, nonatomic) UIView *currentView;

答案 1 :(得分:3)

执行[currentView removeFromSuperview]后,您应该致电currentView = nil,ARC将会发布魔法。然后,您可以使用那里的新UIView重新分配currentView