3

ドキュメントによると、UIWebViewインスタンスを破棄する前に、UIWebViewデリゲートプロパティをnilに設定する必要があります。

私の質問は次のとおりです。UIWebViewがIBでセットアップされ、そのデリゲートがviewControllerであるファイル所有者を指している場合。また、UIWebViewとそのスーパービューは、実行中に破棄されることはありません。デリゲートをnilに設定する必要がありますか?

UIWebViewへの参照を取得するのは難しいように思われるため、これを求めています。

知識のある人がいくつかのヒントを与えることを願っています。

(非アーク設定)

4

1 に答える 1

6

ドキュメントの提案に従うことは常に良い習慣です。ほとんどの場合、あなたが提案していることは一般的に正しいです。オブジェクトが破棄されるのは実行が終了するときだけなので、デリゲートをnilに設定する必要は実際にはありません。ただし、これは「メインが戻る直前にのみ解放されるため、このヒープスペースを解放する必要はありません」と言っているのと似ています...

より差し迫った問題は、アプリケーションがメモリ不足の警告を受け取った場合に何が起こるかです。メモリ警告を受信し、がアンロードされ、デリゲートがnilに設定されていない場合、デリゲートをセットアップ/削除するタイミングUIWebViewによっては、バックグラウンドでメモリリークが発生する可能性があります。UIWebView

破棄時にデリゲートをnilに設定すると、デリゲートがnilに設定されていることを検出すると、UIWebViewによって必要な処理がすべて処理されます。そうしないと、インスタンスが予期せず破壊された場合(たとえば、メモリ不足の警告が原因で)、警告がクリアされると、読み込みが再度行われ、UIWebViewデリゲートを設定するために実行されるすべての手順が実行されます。 2回、その間に「シャットダウン」手順が発生することはありません。デリゲートを破壊時にゼロに設定するという彼らの主張を考えると、これはメモリリークまたは同様に不吉なものとして現れると思います。

于 2012-11-05T02:28:16.593 に答える