I’m programmatically creating labels in a function and putting them into an NSMutableArray, then I delete them from another function.
The problem is that the labels actually disappear from screen but they’re still using memory and when some time passes the program starts to work very slow.
Here is my code:
This is the function that creates the labels.
- (void)CrearEstrellas{
for(int i=0; i< 10; i++)
{
float x = arc4random() %300;
float y = arc4random() %100;
UILabel *estrella = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 4, 4)];
estrella.tag = i;
estrella.center = CGPointMake(x,y-100);
estrella.text = @".";
estrella.textColor = [UIColor whiteColor];
[self.view.superview addSubview: estrella];
[arrayEstrellas insertObject:(estrella) atIndex: i];
}
}
And this is the function that delete them from the superview:
- (void)Lineatiempo{
for(int i=0; i<[arrayEstrellas count]; i++)
{
UILabel *estrella = [arrayEstrellas objectAtIndex:(i)];
float x = estrella.center.x;
float y = estrella.center.y;
estrella.center = CGPointMake(x,y+10);
if(estrella.center.y>200){
[estrella removeFromSuperview];
estrella = nil;
}
}
}
I would like to know what am i doing wrong! Thanks.
You add the view to an array.
NSArray(andNSMutableArray) retain the objects you add to them. The aren’t deallocated until you remove them from the array.So in addition to calling
removeFromSuperviewyou also have to remove the view from the array.