При получении didReceiveMemoryWarning делегат UIImageViewController равен нулю

Я пытаюсь выяснить, почему, когда мое приложение получает didReceiveMemoryWarning, в то время как UIImagePickerController имеет контроль, средство выбора (и, следовательно, делегат средства выбора) устанавливается в освобожденный viewcontroller?

View Controller одним звонком

self.postImagePicker = [[UIImagePickerController alloc] init];
self.postImagePicker.delegate = self;
self.postImagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
self.postImagePicker.allowsEditing = YES;
[self presentModalViewController:self.postImagePicker animated:YES];

Затем отображается UIImageViewController и выбирается изображение. Затем смоделируйте предупреждение памяти. Контроллер представления, который представил диалоговое окно, получает ошибку предупреждения о памяти, и средство выбора установлено в 0x0 (что означает, что делегат также теперь недействителен).

Я использую ARC. Что-то изменилось в способе вызова UIImageViewController, так что представление, которое его представило, не было перезагружено, в результате чего указатель на UIImageViewController стал недействительным?

2 ответа

Решение

Проверьте didReceiveMemoryWarning, У тебя есть self.postImagePicker = nil; там? Проверить didReceiveMemoryWarning методы для ваших контроллеров восходящего представления. У них есть ссылка на этот контроллер представления? Если нет, навигационный контроллер может выгружать этот контроллер представления. delegate это слабая ссылка, поэтому недостаточно держать контроллер представления рядом, если ничего другого нет.

Я собираюсь догадаться, что ты nilредактировал ваш контроллер вида в каком-то другом контроллере вида viewDidUnload, Нет никаких причин для освобождения вашего контроллера представления, если он явно не освобожден (или вы не сохранили strong ссылка на это в первую очередь).

Другие вопросы по тегам