У меня есть контроллер, который делает HTTP-запросы GET, используя пользовательский класс, который действует как делегат для NSURLConnection
. После сбоя или завершения NSURLConnection
пользовательский класс вызывает методы контроллера и передает объект NSData
полученных данных.
Я столкнулся с проблемой, когда контроллер в действии динамически создается и помещается в стек контроллера навигации. Этот контроллер выполняет HTTP-запрос GET в своем методе viewDidLoad
. Если пользователь быстро нажимает «назад» на панели навигации, этот контроллер освобождается. Если это произойдет до того, как запрос HTTP GET завершится, полученный обратный вызов NSURLConnection
станет вызовом метода для объекта dealloc, что приведет к EXC_BAD_ACCESS.
Каков наилучший подход к очистке любых ожидающих NSURLConnections
, которые были запущены контроллером, который на самом деле может быть уже освобожден?
Я добавил несколько операторов NSLog
, и кажется, что мой пользовательский класс, используемый в качестве делегата NSURLConnection
, на самом деле не получает сообщение dealloc
. Я удостоверился, что для экземпляра контроллера этого класса было установлено значение nil в viewDidUnload
, а также вызвал выпуск для него, но он все еще, кажется, дольше, чем контроллер.