0

私は iPhone 開発にまったく慣れていないわけではありませんが、自分のコードに最適な設計の選択について確信が持てない状況に出くわしました。

インターネットから画像を非同期にフェッチして画像ビューにロードするView Controllerがあります。ただし、アプリがメモリ警告を受け取ると、didReceiveMemoryWarning によって imageView が解放されます。画像の読み込み中にアプリがメモリ警告を受け取った場合、コードが画像を imageView に読み込もうとするまでに imageView は nil になります。

viewDidLoad のベスト プラクティスは何ですか? 後で必要になる可能性のある変数をインスタンス化する必要がありますか? または、コードの他の場所で nil 値をチェックする必要がありますか?

また、viewDidUnload では、IBOutlet 変数を nil に設定する必要がありますか? どうしてこれなの?

ありがとう!-マット

4

2 に答える 2

1

画像がロードされたときにオンデマンドで画像ビューを作成しないのはなぜですか? 以前に作成する必要はありません。または、そうする場合は、リリースされた場合に再作成するためのコードを用意してください。

viewdidunload では、viewdidload (またはビューの読み込み) で作成したリソースを解放する必要があります。インターフェイス ビルダーが接続した IBoutlets を含めます。これらの変数を nil に設定して、リリース後に誤ってアクセスしたり、二重リリースしたりしないようにすることをお勧めします。

于 2010-11-13T08:13:50.427 に答える
1
  1. IBOutlets は、インスタンス変数とプロパティの両方にすることができます。どちらの場合も、最上位のスーパービューであるビューがアンロードされるときに、参照を解放する必要があります。IBOutlet 保持プロパティを nil に設定すると、参照が自動的に解放されますが、インスタンス変数については、それらを解放する必要があります。viewDidUnload は dealloc ではないため、インスタンス変数を nil に設定する必要があります。そのため、マネージ メモリ ルールに準拠する必要があります。そうしないと、インスタンス内に無効な参照が存在する可能性があります。

  2. viewDidLoad で何をすべきかについてのルールはないと思いますが、viewDidUnload でいくつかの変数を解放して nil に設定した場合、フレームワークを信頼しない限り、viewDidLoad で nil を再度確認する必要はありません。 .

于 2010-11-13T08:15:43.067 に答える