Reputation: 83
Does the automatic reference counting release an object if I set the pointer to nil or assign the pointer to another object?
For example doing something like that:
//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];
}
If this code leaks, how would I declare *currentView properly? Or how would I make ARC "release" the currentView? thanks!
Upvotes: 4
Views: 4386
Reputation: 15442
With ARC you don't need to think about release/retain
.
Since your variable will have been implicitly defined as strong
there's no need to set it to NULL
- it'll be released before it's assigned to.
Personally though I prefer to declare properties:
@property (strong, nonatomic) UIView *currentView;
Upvotes: 6
Reputation: 89509
After doing [currentView removeFromSuperview]
, you should call currentView = nil
and ARC will do it's release magic. You can then reassign currentView
with that new UIView there.
Upvotes: 3