RemoveFromSuperview不是清理内存

时间:2012-11-22 03:01:42

标签: xcode memory label

我以编程方式在函数中创建标签并将它们放入NSMutableArray中,然后我从另一个函数中删除它们。 问题是标签实际上已从屏幕上消失,但它们仍在使用内存,一段时间过后程序开始工作的速度很慢。

这是我的代码:

这是创建标签的功能。

- (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];
    }

}

这是从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;
        }
    }
}

我想知道我做错了什么!感谢。

1 个答案:

答案 0 :(得分:1)

将视图添加到数组中。 NSArray(和NSMutableArray)会保留您添加的对象。在从阵列中删除它们之前,不会取消分配。

因此,除了调用removeFromSuperview之外,您还必须从数组中删除视图。