Legendar
Legendar

Reputation: 13

RemoveFromSuperview is not cleaning-up memory

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.

Upvotes: 0

Views: 472

Answers (1)

DrummerB
DrummerB

Reputation: 40211

You add the view to an array. NSArray (and NSMutableArray) retain the objects you add to them. The aren't deallocated until you remove them from the array.

So in addition to calling removeFromSuperview you also have to remove the view from the array.

Upvotes: 1

Related Questions