优化动态UILabel创建

时间:2013-02-02 17:59:30

标签: objective-c xcode optimization for-loop uilabel

假设我运行了以下代码。我正在动态创建添加到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];
}

1 个答案:

答案 0 :(得分:2)

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

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

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