1

私は多くの plists を読んで、それらを UITableview に表示しています。問題は、アプリ自体が非常に遅いことです。アーカイブまたはシリアライゼーションについて何か読んだことがあります.

データをアーカイブする方法や、plist を最適化するためにデータをシリアル化する方法を誰かが教えてくれると助かります。

これは私が持っているものです:(「データ」のすべての配列を収集している場所)

- (void) makeData {
    data = [[NSMutableArray alloc] init];
    sectionArray = [[NSMutableArray alloc] init];

    //here we connect each array built with the remote plist on the server - different plists for each
    amenajariArray = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://..../amenajari.plist"]];
    apicultoriArray = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://..../apicultori.plist"]];
    asigurariArray = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://..../asigurari.plist"]];
4

2 に答える 2

1

データを取得するために、3 つの同期 Web 要求のように見えるものを作成しています。少なくとも、これらを非同期および並列にする必要があります。また、バックグラウンドでデータを同期または更新し、既定のデータ セットを使用して出荷するというアプローチを取ることもできます。同時実行プログラミング ガイドで、dispatch_async ブロックまたはオペレーション キューを参照してください。ASIHttpRequestの非同期メソッドを調べることもできます。連続してブロックする HTTP 要求に対して UI スレッドをブロックしない方法を見つける必要があります。別の SO が GCD 非同期 UI に投稿: performSelectorOnMainThread with multiple parameter

また、多くのデータ リストを保持していて、パフォーマンスの問題が発生し始めている場合は、 sqliteまたはコア データ(sqlite によってサポートされている)を調べることをお勧めします。

リストを保持している場合、1 つの項目/プロパティを変更するとリスト全体が書き込まれることに注意してください。また、多くのリストを保存している場合 (特にデータ間に関係がある場合) は、データベースの方が適している可能性があります。また、より高速で最適化されたクエリ パターンを提供することもできます。

于 2012-05-27T15:45:48.977 に答える
0

上記の状況では、配列はすでに plist (xml) 形式でシリアル化されています。バイナリ形式にシリアライズしても思うように性能が上がらない。

パフォーマンスを向上させるために、遅延読み込みの概念を使用して、テーブル ビュー データソースの配列を埋めることができます。または、最初の 25 行を表示してから、次の 25 行のボタンを表示します。これらには、sqlite またはコア データが必要でした。

于 2012-05-27T16:06:18.040 に答える