Here’s a pseudo class to demonstrate:
myView : UIView
- (void) init {
UIScrollView * scroller = [[UIScrollView alloc] init];
scroller.delegate = self;
[myView addSubview:scroller];
return self;
}
Under ARC, do I need to do anything else for memory to be freed correctly when all other references to myView have been removed? Will the reference between the two objects keep them sticking around forever without any intervention?
Does this change depending on whether or not scroller is a class property, or just a local variable declared in the function?
Just trying to find out why I’ve got multiple instances of some classes sticking around that shouldn’t be there – semi related question, is there an easy way to find out why an object stays in memory (eg see all references to this object)?
iOS classes (like
UIScrollViewandUIWebView) already handle this correctly.However, if you have your own delegate protocols and delegate properties, you need to make sure they are set to assign and not retain. To do this, wherever you declare a delegate (or whatever kind of protocol) you need to add the __unsafe_unretained tag thing:
It doesn’t. However keep in mind that adding something as a subview, the parent view will retain it automatically, regardless if you have a property or not.