問題タブ [nsurlcache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - iOSのキャッシュ用のNSURLRequestメモリサイズ
ディスクにマップされたキャッシュ (メモリー) に指定した memorySize ですか、それとも使用されている実メモリーですか?
ios - iOSの場合、diskPath:nilの場合、NSURLCacheキャッシュはどこに保存されますか?
私はこのようなコードに出くわしました:
問題は、diskPathがnilに渡されたときに期待される動作を見つけることができなかったことです。 NSURLCacheのドキュメントでは、この状況を明示的に説明していません。また、私自身のテストでそれを理解することもできませんでした。
キャッシュはどこに保存されますか?またはそのコードはバグの上にありますか?
ありがとう。
caching - NSURLCacheは、iOS5で一貫性のない結果を提供し、一見ランダムに見えます
NSURLCacheで頭を悩ませるのに非常に長い時間を費やしたばかりなので、他の人が私の不幸を回避できることを願って、このちょっとしたアドバイスを提供します。
それはすべて合理的に十分に始まりました。私の新しいアプリプロジェクトはiOS5以降のみを対象としているため、すべてのWebキャッシングのニーズに新しいNSURLCache実装を利用できると思いました。いくつかの特別なタスクを処理するためにNSURLCacheのカスタムサブクラスが必要でしたが、それはすべてAPIによって有効にサポートされているようでした。ドキュメントをざっと読んで、私はレースに出かけます:
8 MBのキャッシュを開始するのが適切だと思います。より大きなディスクキャッシュでバックアップして、より大きなイメージをローカルで提供できるようにします。残りのネットワークコードをフックしてNSURLConnectionを使用し(実際にはMKNetworkKitを使用しましたが、それは無関係であることが判明しました)、キャッシュから素晴らしいことを期待しています。案の定、キャッシュされるはずのすべてのリクエストは忠実にキャッシュに保存されており、応答はキャッシュから提供されると忠実にすばやく返されます。これは、ペンザンスの海賊の定期的な制作であり、私のネットワークスタックで非常に多くの義務が飛び交っています。
何かが足し合わないことを除いて。キャッシュから処理できるリクエストは、引き続きネットワーク経由で送信されます。そうでない場合を除いて。キャッシュが実際にリクエストを処理するために使用されているかどうかは、完全にランダムで断続的に見えます。私は欲求不満で髪を引き裂き、何が起こっているのかを理解しようと文字通りすべてを掘り下げます。私はテストアプリを構築し、あらゆる場所にブレークポイントを設定し、パケットトレースを切り取り、NSURLCacheに言及しているインターネット上のすべての単語を読み、キャッシュ制御ヘッダーを試し、コードをコメントアウトし、サブクラスをバイパスし、さらには丹念にトレースします。 NSURLCacheとそのCFNetworkingの友人が、その下にある不思議な論理を理解しようとするためのアセンブリ。私はARMとObjective-Cの呼び出し規約の知識を大幅に向上させ、低レベルのデバッグについてかなり学びますが、実際に何が起こっているのかを理解することはできません。全体がイオランテの悪夢の歌のように感じています海賊王の良心的な独裁政権よりも、私はそれをすべて捨てる寸前です。
TL / DRバージョン:NSURLCacheは機能しているように見えますが、キャッシュされた結果が利用可能であっても、ランダムに返されません。
ios - NSURLCache と .svg ファイル
UIWebView に必要な大きなファイルの一部をローカルにキャッシュしており、これらのファイルの提供に役立つカスタム実装を備えた NSURLCache のサブクラスを持っています。
これを使用してリクエストをハイジャックし、ローカルに保存されたファイルのコピーを返します (主に t
cachedResponseForRequest:request の本文 (ボイラー プレートなし) は基本的に次のとおりです。
これは、単一の svg 画像を除いて、キャッシュされたすべてのコンテンツに対して正しく機能します。svg 画像をロードしようとすると、cachedResponseForRequest:request に進み、NSCachedURLResponse オブジェクトを作成して返します。
ただし、アプリケーションが次に行うことは、リモート サーバーからファイルをダウンロードすることであり、その後のすべての要求はキャッシュから処理されます。ファイルは比較的大きく、パフォーマンスに影響を与えるため、リモートでダウンロードしたくありません。
NSURLCache は .svg ファイルを他のファイルタイプとは異なる方法で処理しますか?
ios - NSURLConnection が特定の画像をキャッシュしたかどうかを確認する方法は?
UIImage が既に NSURLConnection でキャッシュされているかどうかを調べるにはどうすればよいですか?
例:
明らかに上記のコードは機能しませんが、要点はわかります...
ありがとう!
objective-c - monotouch/objective c iphone 5.x NSURLCache を使用して Web ページをキャッシュする方法は?
私のiPhoneに似たスレッドが見つかりました: NSURLCache on disk。私がやりたいことは基本的にほぼ同じです。WebページをiPhoneシミュレーターに保存して、オフラインで使用できるようにします(WebViewにロードします)。オンラインのときはそれらをダウンロード/キャッシュし、オフラインのときはキャッシュされたバージョンを使用して、オフラインで変更できるようにします。
私が 5.0 以降に読んだことによると、iPhone ではディスクへのキャッシュが許可されています。私の質問は、NSURLCache を使用してそれを行う方法ですか?
NSURLCache クラスのドキュメントをいくつか調べましたが、特定の回答や例が見つかりませんでした。
ios - NSURLCacheは、期限切れのキャッシュされた応答を削除しますか?
Appleは、iOS5.0以降でディスクキャッシングをサポートしています。以前はホームロールソリューションNSURLCache
を使用していましたが、過去に奇妙な動作を目にしたことがあるので、最終的に使用することを期待してテストしています。
私が抱えているより厄介な問題の1つは、cachedResponseForRequest:
期限切れのリクエストを返すことです。使用しているiPhoneの時計を早めに設定してテストしてきました。ヘッダーを解析すると、デバイスの時刻が有効期限よりも進んでいることが明確に示されます。
期限切れのリクエストを定期的に削除するバックグラウンドタスクが存在する可能性があることを受け入れたいと思います。リクエストが「自然に」期限切れになるかどうかを実際に待つテストを行いましたが、そうではありません。
Appleはキャッシュの無効化を正しく実装できなかったのでしょうか?
Charlesプロキシを使用してテストしています。これは難しい問題であり、キャッシュの無効化を実装しなければならない人をうらやましくはありませんが、iOSは今では成熟したSDKになるはずです。
ios - NSURLCache は file:// をサポートしていませんか?
使用中にロード[NSURL fileURLWithPath:@"2.html"]
したいのですが、cachedResponseForRequest: 関数が実行され、http:// スキームで正しく実行されるオブジェクトが返されます。
しかし、ロードは最終的に失敗しました。私はいくつかのオプションを逃しましたか? UIWebView
NSURLCache
NSCachedURLResponse
UIWebView
圧縮ファイルで load html fileを使用したいのですUIWebView
が、ファイルをディスクに解凍するつもりはありません。何か提案はありますか。
iphone - iPhone で利用できるオンディスク キャッシュはありますか?
iPhone のキャッシュ戦略を改善するプロジェクトを見つけました。彼らは確信しているからです:「iPhone OSでは、Appleは不明な理由でディスク上のキャッシュサポートを削除しました」
しかし、そうは思いません。詳細を参照してください: https://github.com/rs/SDURLCache/issues/39
UIWebViewアプリを使用して、フォルダー「Library/Catches/com.company.appname/」に2つのdbファイルがあることがわかりました。
ApplicationCache.db、Cache.db
それらのSQLを試してください
ApplicationCache.dbを開いた後、「select * from CacheResourceData」
Cache.db の「select * from cfurl_cache_receiver_data」
どちらもディスク上のキャッシュ ファイル コンテンツです
だから今、私は混乱しています 誰が私に真実と証拠を教えてくれますか?
iphone - iOS で、NSURLConnection を使用するときに、より大きなファイル (1MB) をキャッシュする方法は?
iOS ではNSURLConnection
、Web サーバーからデータを読み込もうとしていますが、これは単なる PNG ファイルです。
サイズが 1,173,084 バイト (約 1 MB) の 1 つのファイルを除いて、すべてのファイルがキャッシュされます。
pic1.png、pic2.png、... 3、4、5、6 の 6 つのファイルをループしてから、1、2、3、... に戻ります。ファイル サイズは 1MB、650kb、450kb、およびいくつかの小さなファイル。
iPad シミュレーターでテストされているため、メモリは問題になりません。
以下は ですでに行われていviewDidLoad
ます:
でNSURLConnection
作成されましたtouchesBegan
:
キャッシュ サイズは 15MB と 20MB で、合計ファイル サイズである約 3.2MB よりもはるかに大きくなっています。ダウンロードがほぼ瞬時に行われた場合、ファイルがキャッシュされていることがわかりますが、1MB のファイルは何度も処理さconnection:didReceiveData
れ、最終的にはconnectionDidFinishLoading
.