контроллер выбора изображений забирает безумную память, даже если освобожден - PullRequest
2 голосов
/ 30 июня 2010

мой инструмент выбора изображений инициализируется следующим образом:

self.imgPicker = [[UIImagePickerController alloc] init];

self.imgPicker.allowsEditing = YES;

self.imgPicker.delegate = self;

self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

представление:

[self initImagePickerFromLibrary];---- (это вызывает строки, о которых я упоминал ранее)

      [self presentModalViewController:self.imgPicker animated:YES];


      [imgPicker release];

яблочный инструмент говорит: до вызова используемой памяти сборщика 3 Мб. Пока сборщик находится в функции 12 Мб. При редактированииизображение размером 28 Мб, и мое приложение вылетает. Никто не нашел решение для этого?

1 Ответ

3 голосов
/ 30 июня 2010

Одна вещь, которая приходит на ум, это то, что вы делаете self., что может означать, что ваш сборщик изображений сохраняется дважды.Один раз, потому что вы выделяете его, и один раз, потому что вы используете сеттер.

Как выглядит строка @property для imgPicker?У него есть retain?Если это так, вам следует либо изменить первую строку в первой приведенной выше цитате на:

imgPicker = [[UIImagePickerController alloc] init];

То есть, удалив self..

Также во второй строке вы отпускаете imgPicker напрямую.Если ваш @property действительно имеет retain, вы должны вместо этого просто сделать:

self.imgPicker = nil;

Причина в том, что синтезирующий @property сохраняет и освобождает объекты при их установке.Если вы release imgPicker не установите его на nil, а затем попытаетесь установить для него новое значение, система попытается release уже освобожденного объекта и, возможно, потерпит крах.Выше приведено то же самое, что и:

[imgPicker release];
imgPicker = nil;
...