2

假设我正在运行以下代码。我正在动态创建添加到 UIScrollview 的 1000 个 UILabel。然而,这段代码运行得非常慢,因为每次循环出现时我都必须创建一个新的 UILabel。我不能移动线 UILabel *dayLabel = [[UILabel alloc] init]; 在循环之前,因为它只创建 1 个 UILabel。关于如何优化这段代码的任何想法?

for (int i=0; i<1000; i++) {
    UILabel *dayLabel = [[UILabel alloc] init];
    dayLabel.multipleTouchEnabled = YES;
    dayLabel.frame = CGRectMake(0,  40 * i, 40, 40);
    [_scroller addSubview:dayLabel];
}
4

1 回答 1

2

解决创建对象问题的唯一方法是不创建它们。或者至少还没有创建它们。

所有 1000 个标签都不适合屏幕,因此您只需创建一组适合的标签。然后您观察滚动事件,并动态创建可见的标签。同时,您可以在标签从屏幕上滚动时删除它们。保留这些标签:您可以重复使用回收列表中的旧标签,而不是每次都创建一个新标签。

现在你可能想知道你是否在某个地方看到过这个方案。你是对的,它与 UITableView 用于其单元格的方案相同。这是一段复杂的代码,所以如果你可以用一个表格替换一个满是标签的滚动视图,你会为自己节省很多工作。

于 2013-02-02T18:10:20.983 回答