5

助けてください!これを12時間見つめています。オンラインで調べても解決策が見つかりません。

私のアプリケーションでは、別々のページ/コントローラーで 2 つの UIView コントロールを使用しています。

  • UIImageView (NSData dataWithContentsOfUrl 経由でデータを取得)
  • UIWebView

コードを分離して説明しやすくするために、「MyTestApplication」という新しいビュー ベースのプロジェクトを作成しました。

1 - デリゲート関数に単純な NSData dataWithContentsOfUrl を追加しました。

NSData *imageData = [NSData dataWithContentsOfURL:
  [NSURL URLWithString:@"http://www.google.com/intl/en_ALL/images/logo.gif"]];

(すべて便利な関数を使用しているため、ここでリリースするものはありません)

代替テキスト http://img.skitch.com/20081110-j5tn5n7ixph95ys4rpchibaw5p.preview.jpg

画像を見る

2 - 実行してリークがないことを確認します (予想どおり)

代替テキスト http://img.skitch.com/20081110-fy2qrkgy47hm4fe2f1aakd4muw.preview.jpg

画像を見る

3 - ViewController.xib を開き、ライブラリから UIWebView を追加するだけです (接続する必要はありません)。

代替テキスト http://img.skitch.com/20081110-d63c3yh1a1kqiciy73q8uyd68j.preview.jpg

画像を見る

4 - 実行して、リークがあることを確認します。(どうして???)

代替テキスト http://img.skitch.com/20081110-qtxcfwntbcc3csabda3r6nfjg6.preview.jpg

画像を見る

私は何を間違っていますか?助けてください!

UIWebView を使用している場合、NSData によってメモリ リークが発生するのはなぜですか? 私はそれを理解していません。ありがとう。

4

4 に答える 4

5

dataWithContentsOfURL:iPhoneシミュレーターのNSDataからのリークにも問題がありました。dataWithContentsOfURL:options:error:他の便利な方法 ( ) を使用すると、メモリ リークが発生しないことがわかりました。

私のコードは次のようになりました:

NSURL *url = [NSURL URLWithString:urlString];
NSError *error = nil;
NSData *data = [NSData dataWithContentsOfURL:url
                                     options:0
                                       error:&error];

ドキュメントへのリンク

于 2009-09-18T05:07:46.957 に答える
4

私はこれが起こっていると思います:

ViewController.xib が読み込まれると、UIWebView のインスタンスが割り当てられて初期化されます。どこにも配線していないので、解放されていません。接続して、バッキングView Controllerのdealloc関数で解放する必要があると思います。xib ファイルで作成したすべてのオブジェクトを手動で解放しなければならなかったことを覚えています。

于 2008-11-11T05:06:16.220 に答える
1

シミュレーターでリークを実行していますか?もしそうなら、コーダーに注意してください。シミュレータは、iPhoneハードウェアがリークしないメモリをリークします。デバイス上のコードの正確な動作に完全に一致するシミュレーターはありません。

デバイスでもテストします。私は、Simでリークしていたが、電話ではリークしていなかったUITableViewControllerの同様の問題で同じことをしました。

于 2008-12-30T15:18:19.447 に答える