Проблемы с указателем делегата после обновления до ARC

Я только что обновил свое приложение до ARC, но у меня возникли проблемы с обработкой классов с делегатами. Поскольку я нацеливаюсь на iOS 4.0 и выше, я использую __unsafe_unretained а также @property (unsafe_unretained) хранить указатели делегатов.

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

Как я могу обновить свой код либо в контроллере представления, либо в службе, чтобы при удалении контроллера представления (извлечении из стека контроллера nav) служба с указателем делегата также удалялась из памяти?

1 ответ

Решение

Оказывается, что не я делаю что-то не так...

Обидевший Н.С.Зомби оказался из-за MKMapViewDelegate, который продолжает посылать 'mapView: didUpdateUserLocation:' после освобождения контроллера представления, которому он принадлежит. Я знаю.

Я решил это, перехватив кнопку "Назад" в моем контроллере представления, и установил делегат равным нулю, прежде чем выдавать его:

- (void)backButtonTapped
{
    self.mapView.delegate = nil;
    [self.navigationController popViewControllerAnimated:YES];
}

Я не знаю, почему MapKit держит делегата после того, как он был освобожден. Если кто-нибудь знает, я был бы рад узнать больше.

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