При получении 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
ссылка на это в первую очередь).