0

次のように、「AddSubview」メソッドを呼び出すメインビューがあると想像してください。

[mainView addsubview:secondView];

...この2番目のビューには、UIkeyboardを表示し、テキストを入力し、アプリでこれを使用して、最後にUIkeyboardを閉じるための適切なコードを含むsearchBarがあります。Ok。

プログラムのこの部分が完了したら、次のように「AddSubview」メソッドをもう一度呼び出します。

[secondView removeFromSuperview];
[mainView addsubview:thirdView];

これが行われると、2番目のビューが消え、3番目のビューに置き換えられます。しかし...2番目のビューで使用されるメモリの割り当ては解除されません。さらに重要なことに、UIkeyboard(約800 Ko)で使用されるメモリは、アプリを終了するまで割り当てが解除されず、2番目のビューを3番目のビューに置き換えてもアクティブなままです。

それで、UIkeyboardによって使用されるメモリの割り当てを適切に解除する方法はありますか?

(精度:上記のコードでは、3つのUIviewはすべてManView、SecondView、ThirdViewという名前の3つのクラスファイルにサブクラス化されています。これらはそれぞれNIBファイルの3つのUIviewsオブジェクトに対応します。これらの各ファイルに「dealloc」メソッドを配置しました。 。しかし、明らかに、呼び出されたことはありません...)

4

2 に答える 2

1

secondViewの作成方法..subViewを追加すると保持され、削除すると自動的に解放されます。

secondViewを作成するときは、自動リリースを使用してみてください。または、スーパービューから削除した後にsecondViewを解放します。解放する前に、ビューがnilかどうかを確認してください。したがって、リリースされていれば、アプリケーションはクラッシュしません。

于 2010-09-24T15:37:47.320 に答える
0

KiranThoratが指摘しているように、addSubviewはビューを保持するため、自分で適切にリリースするようにしてください。ビューがdeallocメソッドなどのサブビューを解放することを確認してください。

また、シミュレーターでリークをチェックしたところ、UIKeyboardのリークがいくつか見られるのは正常であることがわかりました。これらはデバイスには存在しません(少なくとも私の場合)。

于 2010-09-24T16:38:19.123 に答える