Как я могу получить EXC_BAD_ACCESS в didReceiveMemoryWarning UIViewController? - PullRequest
1 голос
/ 17 февраля 2011

Я реализую didReceiveMemoryWarning в подклассе UIViewController. Мой код выглядит примерно так:

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    [self cleanUp];
}

Когда мое приложение действительно получило предупреждение о памяти, оно зависло с EXC_BAD_ACCESS в строке [self cleanUp] (метод, который существует). Как такое могло произойти? Насколько я понимаю, фреймворк вызвал метод didReceiveMemoryWarning, а затем освободил мой класс, прежде чем он попытался выполнить [self cleanUp]. Почему это случилось? Как я могу предотвратить это?

Ответы [ 3 ]

1 голос
/ 17 февраля 2011

Вы делаете что-нибудь необычное в вашем контроллере вида?Какое значение self при сбое?Это происходит как при отладке (оптимизация отключена), так и в сборках релиза?

Попробуйте запустить с NSZombieEnabled .Если это проблема с несбалансированным сохранением / выпуском, это должно помочь вам найти ее.

1 голос
/ 23 февраля 2011

Сбой фактически происходил внутри метода -(void)cleanUp, хотя Xcode указывал на строку, которую называл [self cleanUp]. Внутри -(void)cleanUp код обращался к элементам в массиве, который уже был освобожден, следовательно, EXC_BAD_ACCESS. Спасибо всем за полезные предложения.

0 голосов
/ 17 февраля 2011

Дикая догадка: сначала вызовите [самоочищение], затем вызовите супер.Вы также можете симулировать предупреждения памяти в симе, если это поможет.

...