1

私の問題は、すべて正しく実行しているにもかかわらず、アプリケーションでメモリ リークが発生することです。ローカルの uipickerviwをalloc作成し、それをクラス メンバー (pickerview) に割り当ててから、ローカルの uipickerview の割り当てを解除します。それでもメモリリークが発生しますが、その理由がわかりません。

UIImagePickerController *the_pImagePicker=[[UIImagePickerController alloc] init];
//memory leak is displayed on this line.
self.m_pImagePicker = the_pImagePicker;
self.m_pImagePicker.delegate = self;    
[the_pImagePicker release];
4

1 に答える 1

2

ピッカーの最初の作成/割り当て後にリークがあってはなりません。

初めて:

最初の行の後、_pImagePicker の保持カウントは 1 です。2 行目以降は、m_pImagePicker が「保持」プロパティであるため、2 になります。最後の行の後、再び 1 になります。

ただし、m_pImagePicker が「保持」プロパティとして定義されている場合、このコードを再度呼び出して、その前に self.m_pImagePicker を解放しないと、メモリ リークが発生します。

2回目:

2 行目で、self.m_pImagePicker ポインターを再割り当てするため、「初回」の後に self.m_pImagePicker によって参照されるオブジェクトは、保持カウンターがまだ 1 == リークの状態でダンプされます。

最初に self.m_pImagePicker を nil に設定し、コードを実行する前に、まだ nil かどうかを確認します。そうでない場合は、それを解放し、nil に設定して ("nil" ロジックと一致させるため)、新しい割り当てを実行します。

于 2010-08-19T19:21:03.687 に答える