我正在尝试将ScrollView放在我的应用程序中,该应用程序有1000,000个记录,这个scrollView将在应用程序启动时加载,因此应用程序直到百万1000 000记录才运行需要花费大量时间,我很想知道有没有办法在加载记录时显示应用程序和scrollView(在添加其记录时显示scrollView),在代码下面使用:
- (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);
}
}
请建议。
答案 0 :(得分:0)
在加载记录时有没有办法显示应用程序和scrollView?
尝试使用[self performSelector:@selector(loadIt) withObject:nil]; or
[self performSelector:@selector(loadIt) withObject:nil afterDelay:0.2];
在执行此方法之前,它不会阻止您的UI。
您正在加载大量记录。实际上你不应该在当时加载所有记录。你应该使用像tableview这样的机制,只使用那些在scrollview的可见区域中的记录。在滚动之前不要加载新行,您应该重复使用行或视图,以便加快滚动速度。
答案 1 :(得分:0)
Apple UIScrollView
CALayer
非常清楚滚动的视图应该是平铺的,应用程序在视图滚动时提供切片。
管理滚动视图中显示的内容绘制的对象应平铺内容的子视图,以使视图不超出屏幕大小。当用户在滚动视图中滚动时,此对象应根据需要添加和删除子视图。
这对于性能和内存使用都是必需的:可滚动视图由UIButton
支持,而UITableView
又由位图支持。对于每个创建的UICollectionView
个对象也是如此。
虽然这需要很长时间并不奇怪,但是因为使用太多内存而你的应用程序还没有被终止,这更加神秘。
{{1}}和{{1}}都是平铺其内容的视图示例。您可能会发现可以使用其中一个来实现您的要求,如果没有,请遵循他们使用的模型。
答案 2 :(得分:0)
您无需创建1000,000个观看次数。您可以动态创建视图并删除在屏幕空间不可见的先前视图。因此,在滚动时,您可以创建新视图并删除那些超出屏幕可见区域的视图。 这将帮助您节省内存,否则无论您是否在项目中使用ARC,如果您在内存中加载了大量的视图,肯定会有崩溃的机会,ARC在这种情况下无法帮助您。
答案 3 :(得分:0)
尝试此操作后更改
中的代码-viewdidload()
{
[self loadIt];//change this to
[self performSelectorInBackground:@selector(loadIt) withObject:nil];
}