2

次のコードを実行しているとします。UIScrollviewに追加された1000個のUILabelを動的に作成しています。ただし、ループが発生するたびに新しいUILabelを作成する必要があるため、このコードの実行は非常に遅くなります。行を移動できませんUILabel*dayLabel = [[UILabel alloc] init]; ループの前に、UILabelを1つだけ作成するためです。このコードを最適化する方法について何か考えはありますか?

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 に答える