分配10 MB内存后app崩溃

时间:2012-02-10 13:46:13

标签: objective-c

我们的应用程序面临崩溃。我检查仪器,在分配10 MB应用程序后,在任何时候(不是任何修复实例)都会崩溃。

我每次点击for循环中的任何按钮分配approax 1000标签,并在完成工作后释放它请帮助。在仪器中没有内存泄漏,但在分配10 MB内存后仍然会崩溃。

这是我在点击按钮时应用的代码 这是正确的方法??????

-(IBACTION) btnShow
{ 

    for (UIView *obj in scrollview.subviews)
    {
        [obj removeFromSuperview];
    }

    int x;
    int y=0;

    for (int j=0; j<12; j++) {
        x=0;

        // Do any additional setup after loading the view, typically from a nib.
        for (int i=0; i<1000; i++) {
            UILabel * lblUsage=[[UILabel alloc] initWithFrame:CGRectMake(x, y, 75, 45)];
            lblUsage.text=[NSString stringWithFormat:@"%d",i];
            lblUsage.textColor=[UIColor lightGrayColor];
            lblUsage.numberOfLines=2;
            lblUsage.font = [UIFont systemFontOfSize:14.0];
            lblUsage.textAlignment=UITextAlignmentCenter;        
            lblUsage.backgroundColor=[UIColor colorWithPatternImage:
            [UIImage imageNamed:@"labelBox.png"]];
            lblUsage.layer.borderColor = [UIColor blackColor].CGColor;
            lblUsage.layer.borderWidth = 0.5;
            [scrollview addSubview:lblUsage];
            [lblUsage release];

            x+=75;
        }
        y+=40;
    }
    scrollview.contentSize=CGSizeMake(x, 1000);
}

2 个答案:

答案 0 :(得分:2)

您在上面的代码中收到内存警告

内存警告级别1是第一个警告,您应该删除不必要的视图以清理内存

内存警告级别2是限制..现在删除某些内容或您的应用程序将在几秒钟内退出。

当系统决定退出您的应用程序时,会发送

内存警告级别3!由于内存使用

答案 1 :(得分:0)

很抱歉,但你必须采取完全不同的方法 - 这将是 使您的代码更复杂。你无法通过创造来解决问题 12.000标签与图案背景。

  • 最初,您只会创建屏幕上显示的标签和一个或 用户滚动时可能很快出现在屏幕上的两行(和列)

  • 然后,您将通过动态创建和处理标签来完成viewDidScroll中的大部分工作。 在这里,您的代码应该决定哪些标签可以处理(当它们距离可见屏幕足够远时) 并且必须创建它们,因为它们很快就会出现在屏幕上(取决于内容的当前位置)。 偏移)

ScrollViewSuite作为平铺示例。这不完全是你在想什么 因为它应该给你一个kickstart。