0

我以编程方式在函数中创建标签并将它们放入 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];
    }

}

这是从超级视图中删除它们的函数:

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

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

4

1 回答 1

1

您将视图添加到数组中。NSArray(和NSMutableArray)保留您添加到它们的对象。在您从数组中删除它们之前,它们不会被释放。

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

于 2012-11-22T03:05:09.783 回答