1

サーバーにある plist から情報をロードするアプリケーションを作成しました (これが Apple で問題ないことを願っています :-))。アプリケーションは WiFi ではスムーズに動作しますが、3G で使用するとロード時間が少し長すぎます。したがって、plist の読み込みを最適化したいと思います。

plist のコピーをデバイスに保存し、リモート plist が変更されているかどうかのみを確認し、変更されている場合はダウンロードできると思います。これがより少ないデータになるかどうか、つまりロード時間を最小限に抑えるかどうかはわかりません。これがコードでどのように記述されるかさえわかりません。

ロード時間を最小限に抑え、コードサンプルを投稿する方法を知っている人はいますか?

現在、これらの 2 行を使用して plist をロードして保存しています。FETCH_URLは明らかに私の URL です。

NSURL *url = [NSURL URLWithString:FETCH_URL];
NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithContentsOfURL:url];

編集: Thomas Clayson が示唆するように NSURLConnection を使用しようとしていますが、データを NSMutableArray に変換する方法がわかりません。

これは私のviewDidLoadにあります:

NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:FETCH_URL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    if (theConnection) {
        NSLog(@"Connection open.");
    }
    else {
        NSLog(@"Failed connecting.");
    }

次に、新しいデータがあるかどうかを確認する方法と、すべてのデータが収集されているかどうかを確認する方法の 2 つがあります。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSLog(@"More data.");
    [receivedData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"Connection successful.");
}   
4

2 に答える 2

1

何が言いたいのか理解した。の代わりに NSURLConnnection を使用することをお勧めしますinitWithContentsOfURL

initWithContentsOfURL は同期的です。つまり、メイン スレッドで実行されるため、アプリケーションが「ハング」します (これは、UI イベントがメイン スレッドで発生する必要があり、プロセスが発生している (plist のダウンロードを待機している) 場合、アプリは「停止」するためです)。 )。

とにかく - NSURLConnection を使用すると、(別のスレッドで) 非同期に実行できます。これは、しばらくの間アプリが使用可能になることを意味しますが、plist からのデータはすぐには表示されません。そのため、ビューを処理して、connectionDidFinishLoading:.

とにかく見てください。:) とても便利です

于 2011-02-16T12:46:20.547 に答える
0

plist自体を最小化することによってのみ、ロード時間を最小化できます。さまざまな形式(binary plist、xml plist)を試してください。オプションがある場合は、jsonをフェッチしてみてください。AFAIKは、情報とサイズの比率が最も優れています。バイナリplistは最速で解析され、xmlplistはデバッグ目的に最適です。

于 2011-02-16T12:15:05.130 に答える