0

我试图在我的应用程序中放置一个具有 1000,000 条记录的 ScrollView,此 scrollView 将在应用程序启动时加载,因此该应用程序直到百万条 1000 000 条记录才运行,这需要很长时间,我想知道有没有在记录加载时显示应用程序和滚动视图的方法(在添加记录时显示滚动视图),下面的代码正在使用:

    - (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self loadIt];
}

- (void)loadIt{

    float startX = 0;
    float startY = 0;
    [_bigScroll setContentSize:CGSizeMake(320, 312500)];
    _bigScroll.pagingEnabled = NO;
    for (counter=0; counter<999999; counter++)
    {
        UIButton *tester=[[UIButton alloc] initWithFrame:CGRectMake(startX, startY, 10, 10)];

        if (counter % 2 == 0) {

            [tester setBackgroundColor:[UIColor whiteColor]];

        }
        else
        {

            [tester setBackgroundColor:[UIColor grayColor]];
        }

        [_bigScroll addSubview:tester];
        [tester release];

        if (startX == 320) {
            startX = 0;
            startY += 10;
        }
        else
            startX += 10;

        NSLog(@"counter  =  %d", counter);
    }

}

请指教。

4

4 回答 4

0

有没有办法在记录加载时显示应用程序和滚动视图?

尝试使用[self performSelector:@selector(loadIt) withObject:nil]; or [self performSelector:@selector(loadIt) withObject:nil afterDelay:0.2];
它在执行此方法之前不会阻塞您的 UI。

您正在加载大量记录。实际上,您不应该一次加载所有记录。您应该使用类似 tableview 的机制,即仅使用滚动视图可见区域中的那些记录。在滚动之前不要加载新行,您应该重用行或视图以加快滚动速度。

于 2013-09-02T08:34:41.367 回答
0

Apple 的文档非常UIScrollView清楚滚动视图应该是平铺的,您的应用程序在视图滚动时提供平铺。

管理滚动视图中显示的内容绘制的对象应该平铺内容的子视图,这样视图就不会超过屏幕的大小。当用户在滚动视图中滚动时,此对象应根据需要添加和删除子视图。

这对于性能和内存使用都是必要的:可滚动视图由 a 支持CALayer,而后者又由位图支持。对于创建的每个UIButton对象也是如此。

虽然这需要很长时间并不奇怪,但您的应用程序并未因使用过多内存而被终止,这更像是一个谜。

两者UITableViewUICollectionView都是平铺其内容的视图示例。您可能会发现您可以使用其中一种来实现您的要求,如果没有,请遵循他们使用的模型。

于 2013-09-02T08:35:58.343 回答
0

一旦尝试这个更改代码

-viewdidload()
{
    [self loadIt];//change this to 
    [self performSelectorInBackground:@selector(loadIt) withObject:nil];
}
于 2013-09-02T11:01:52.470 回答
0

您不需要创建 1000,000 个视图。您可以动态创建视图并删除以前在屏幕空间中不可见的视图。因此,在滚动时,您可以创建新视图并删除那些不在屏幕可见区域的视图。这将帮助您节省内存,否则无论您是否在项目中使用 ARC,如果您在内存中加载那么多视图,肯定会有崩溃的机会,在这种情况下,ARC 不会帮助您。

于 2013-09-02T10:42:04.843 回答