Приложение iPhone случайно падает при выходе из фона - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть приложение для iPhone, которое в очень редких случаях мгновенно падает, когда выходит из фона многозадачности.Никакой код не запускается - приложение просто сразу падает на этой строке в моем файле main.m:

int retVal = UIApplicationMain(argc, argv, nil, nil);

Xcode сообщает мне: «Программа получила сигнал:« EXC_BAD_ACCESS »."

Кто-нибудь знает, почему это происходит?

Ответы [ 2 ]

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

Хорошо. Извините, что потратил впустую время всех, но я немного покопался и понял, что пропускаю важный звонок. Я забыл вызвать следующее в моем контроллере представления, который имел CLLocationManager.

- (void)dealloc 
{
    myLocationManager.delegate = nil;
    [myLocationManager release];

    [super dealloc];
}

Спасибо за вашу помощь, Jasarien.

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

Без дополнительной информации трудно сказать, что здесь происходит.

EXC_BAD_ACCESS происходит при попытке доступа к недопустимой памяти. Обычно это происходит из-за чрезмерного освобождения или недооценки объекта.

Освежите свой разум с руководством по управлению памятью Cocoa и посмотрите эти страницы на CocoaDev

http://www.cocoadev.com/index.pl?DebuggingTechniques

http://www.cocoadev.com/index.pl?NSZombieEnabled

Там вы найдете множество методов, которые помогут вам отследить такие вещи, как EXC_BAD_ACCESS.

Статья NSZombileEnabled также содержит довольно хороший шаблон для файла .gdbinit, который будет настраивать загрузку глобальных точек останова и устанавливать некоторые переменные окружения при каждом запуске GDB. Я нахожу это очень, очень полезным.

Таким образом, когда у вас есть эти точки останова и NSZombieEnabled установлен на YES, вы не увидите EXC_BAD_ACCESS, вместо этого вы получите точку останова, на которой обычно произошел неправильный доступ, и сообщение в журнале по типу «релиз отправлен» в освобожденный экземпляр "или что-то подобное. Это должно точно определить, где вы ошиблись.

...