0

//ポイント

多くのオブジェクト (UIWebView) を徐々にメモリにロードし、しばらくするとクラッシュします。助けてください

//詳細

水平ページングを備えた UIScrollView があり、各ページ (個別のビュー コントローラーを使用) には、ユーザー操作が無効になっている UIWebView が含まれています。最初は、ページ 0 の webview #0 のみが読み込まれ、ページを進むにつれて、アプリは特定のデータを読み込む要求を徐々に送信します。ダウンロードしたデータはメモリに残ります。

インターネット ソースから約 20 個の Webview を読み込んだ後、アプリがフリーズしてクラッシュします。デバイスに保存されているダミーの HTML 文字列を使用すると、約 50 個の webview を読み込んだ後に発生します。しかし、問題は解決しません。

リークの多くを修正し、Mallocs だけが残っています。少量の UIWebviews Loaded では問題が発生しないため、コードを変更して 3 つの Webview を指定し、それらを再利用する必要があると思います。しかし、それで問題が解決するかどうかはわかりません。以前にクラッシュしないアプリをいくつか開発しましたが、これはユニークなケースです。

Webview へのポインターと、すべての Webview 内のその他の要素 (ラベルなど) を配列に格納します。新しいページが読み込まれるたびに、配列のカウントが増加します。

私は xcode 4.3 とジェイルブレイクされた iphone 4 を使用して開発しています。Xcode で署名を要求することをオフにした結果、アプリが電話にコピーされたにもかかわらず、プロセスにアタッチできませんでした。電話でデバッグできません。私のアプリはシミュレーターではうまく動作しますが、アイコンをタップして電話で起動した後、しばらくするとクラッシュします。

私がそのように説明できることから、何が問題であると思いますか? ありがとう

4

3 に答える 3

0

ページングには3つのUIWebViewを使用するだけで済みます。ユーザーが2ページ目にいるとします(1ページ目は左側のページ、3ページ目は右側にあります)。を使用して3ページにスワイプすると、現在3ページの1ページにあるWebビューを表示できます。ユーザーがページ間をスワイプしたときに、適切なhtmlを再ロードする必要があります。

Webコンテンツのキャッシュがあれば、ダウンロード後の速度は問題になりません。

于 2012-09-30T15:01:09.380 に答える
0

はい、確かに s が多すぎるUIWebViewと、メモリ不足によるクラッシュが発生します。複数の を使用する理由はわかりませんがUIWebView、いくつかを作成するのではなく、少量を再利用するというあなたのアイデアに従います。

少量を使用してもデバイスがクラッシュしないことに基づいて、問題はUIWebViews の使用が多すぎることにあり、ジェイルブレイクされたデバイスとの互換性の問題ではないと思います.

于 2012-09-30T14:29:41.197 に答える
0

WebKit はメモリを大量に消費することで有名です。メモリの大きなブロックを malloc し、他のリソースを解放する機会を与える前に失敗します。1つUIWebViewは十分に悪いです。UIWebView50 どころか、5 秒しかないアプリでこの問題が発生しました。

いくつか試してみることができます。1 つ目は、Web ページがそれほど複雑でない場合は、DTCoreTextなどの代替ビューを使用してレンダリングできます。Web ビューが必要な場合は、さまざまな HTML コンテンツをキャッシュし、1 つを使用して再レンダリングできますUIWebView

于 2012-09-30T14:35:19.147 に答える