В принципе, предупреждение о памяти ничего не будет делать с вашими контроллерами представления, но оно будет выгружать представления тех контроллеров представления, которые в данный момент не отображаются на экране.
В вашем конкретном случае ябудет искать что-нибудь в коде из вашего Контроллера Представления Настройки, которое может ссылаться на что-то из представления контроллера основного представления.В этом случае, вероятно, эта ссылка будет равна нулю после появления предупреждения о памяти.
Кроме того, вам следует проверить реализацию методов didReceiveMemoryWarning, чтобы убедиться, что вы избавляетесь от чего-то, что может понадобиться дляотклонить это представление настроек.
При нехватке памяти все представления с этих «неактивных» контроллеров представления будут выгружены.Поскольку ваш метод dismissSettings
объявлен на главном контроллере, при его вызове вполне возможно, что все элементы вашего основного представления равны нулю.Я не знаю, какие операции содержатся в коде «Обновить некоторые другие вещи», но я предполагаю, что что-то, связанное с представлением, приводит к сбою метода.
Я бы предложил перенести весь код, связанный с перезагрузкой.к представлению метода viewDidAppear
, поскольку гарантированно будет загружено представление.
С другой стороны, я бы порекомендовал вам перенести реализацию метода dismiss на фактический контроллер представления настроек (помните, чтоэто должно быть что-то вроде [ self.navigationController dismissModalViewControllerAnimated:YES];
, так как вам нужно закрыть навигационный контроллер).По крайней мере, так я всегда делал и никогда не подводил меня.Логика в том, что я не хочу, чтобы неактивные контроллеры представления запускали какую-либо логику.
Наконец, как вы упоминаете, что вы ориентируетесь на iOS 5 и выше, я настоятельно рекомендую перенести ваш проект в ARC.Это легче сделать, чем кажется, и после того, как вы переехали, это действительно здорово.
Другая возможная причина вашей проблемы - то, что вы вызываете метод dismiss с помощью уведомлений, и что ваш главный контроллеротписавшись от этого уведомления по методу viewDidUnload.Имейте в виду, что метод viewDidUnload будет вызываться при возникновении условия нехватки памяти!