uipickerview вызывает утечку памяти - PullRequest
1 голос
/ 19 августа 2010

Моя проблема в том, что в моем приложении есть утечка памяти, хотя я все делаю правильно. Я разрешаю местный пользователь uipickerviw, назначаю его члену класса (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];

1 Ответ

2 голосов
/ 19 августа 2010

Не должно быть никаких утечек после самого первого создания / назначения сборщика.

Первый раз:

После первой строки счетчик удержания the_pImagePicker равен 1. После второй строки он становится равным 2, потому что m_pImagePicker является свойством «удерживать».После последней строки снова уменьшается до 1.

Однако, если m_pImagePicker определено как свойство "retain", и если вы снова вызовете этот фрагмент кода и не освободите self.m_pImagePicker до этого, вы потеряете память:

Второй раз:

Во второй строке вы переназначаете указатель self.m_pImagePicker, поэтому объект, на который ссылается self.m_pImagePicker после «Первый раз», будет сброшен со счетчиком сохранения, равным 1 == утечка.

Сначала я установил бы для self.m_pImagePicker значение nil, а перед выполнением вашего кода проверил бы, равен ли он нулю.Если это не так, я бы выпустил его, установил его равным nil (просто чтобы соответствовать логике «nil»), а затем выполнил бы новое назначение.

...