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!
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;
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With