0

サーバー内の画像とは別にいくつかのファイルをダウンロードします。これらのダウンロードされたファイルは、TTURLCache を使用してキャッシュされます。一定期間にわたって、アプリが消費するディスク容量が増加する可能性があります。同じ理由で、アプリの設定には、キャッシュされた情報を選択的に消去する機能があります。

この投稿の助けを借りて、サーバーからの URL に対応するローカル ディスクに保存されているファイルを削除できます。これにより、サンドボックスの場所 "Library/Caches/Three20" からデータが消去されます。

ただし、オフライン モードに切り替えても、アプリは引き続きリモート リソースをプルしてデータをレンダリングできることがわかりました。また、インターネット接続がない場合でも、ファイルを「Library/Caches/Three20」の場所に戻します。さらに精査すると、リクエストが取得されるキャッシュ データベースがあることがわかりました。

「ライブラリ/キャッシュ/com.yourcompany.yourapp/Cache.db」「ライブラリ/キャッシュ/com.yourcompany.yourapp/Cache.db-shm」「ライブラリ/キャッシュ/com.yourcompany.yourapp/Cache.db-wal」

すべて問題ないので、「Library/Caches/Three20」の場所からファイルを選択的にクリアすることとは別に、データベースからデータベースエントリを選択的に削除する必要があることをテストしました:「Library/Caches/com.yourcompany.yourapp/Cache.db」 "、"Library/Caches/com.yourcompany.yourapp/Cache.db-shm" & "Library/Caches/com.yourcompany.yourapp/Cache.db-wal".

コードを確認しましたが、データが Cache.db に正確に書き込まれている場所と、その情報をどこで消去する必要があるかを見つけることができませんでした。

どんなリードも大歓迎です。

4

2 に答える 2

1

tonklon の回答と私の調査に基づいて、URL の応答をキャッシュしているのは NSURLCache であることがわかりました。また、写真には、クリアする必要があるRestkitの「永久保存」データもありました。したがって、次の 3 つは、データを (選択的に) クリアすることを確認します。

  1. サンドボックスにキャッシュされた情報が不要になったノードに対してのみ、Three20 のキャッシュ ファイルを選択的に消去します ( https://stackoverflow.com/a/5161356/260665から): 「 Library/Caches/Three20」からデータを消去します。

    [[TTURLCache sharedCache] removeURL:@" http://example.com/an_image.jpg " fromDisk:YES]; [[TTURLCache sharedCache] invalidateURL:@" http://example.com/an_image.jpg "];

  2. Restkit キャッシュをクリアする: (Restkit の作成者から: https://stackoverflow.com/a/7230083/260665 ) " Library/Caches/RKClientRequestCache-youapp.com/PermanentStore " & " Library/Caches/RKClientRequestCache-からデータをクリアします。 yourapp.com/SessionStore "

    [[RKClient sharedClient].requestCache invalidateAll];
    
  3. NSURLCache 情報をクリアします。「 Library/Caches/com.yourcompany.yourapp/Cache.db-wal 」からデータを消去します( http://twobitlabs.com/2012/01/ios-ipad-iphone-nsurlcache-uiwebview-memory-utilization/ )

    [[NSURLCache sharedURLCache] removeAllCachedResponses];
    NSUInteger originalDiskCapacity = [[NSURLCache sharedURLCache] diskCapacity];
    [[NSURLCache sharedURLCache] setDiskCapacity:0];
    [[NSURLCache sharedURLCache] setDiskCapacity:originalDiskCapacity];
    
于 2013-09-12T02:56:00.650 に答える