EXC_BAD_ACCESS от проверки, если условия заявления? - PullRequest
1 голос
/ 08 марта 2011

Я получаю сообщение об ошибке EXC_BAD_ACCESS в моем приложении.Основываясь на связке NSLog, я смог определить, что это происходит, при проверке условий оператора if.Мое утверждение if выглядит следующим образом:

if ( ([todaysDate compare:mostRecentDate] != NSOrderedSame) || (mostRecentDate == nil) ) {
   //Do Stuff
}

Может кто-нибудь сказать мне, почему я могу получить эту ошибку?

ПРИМЕЧАНИЕ: todaysDate и mostRecentDate - это ivar, которые устанавливают различные точки в коде

Ответы [ 3 ]

1 голос
/ 08 марта 2011

Ваш случай, скорее всего, будет вызван недостаточным удержанием ваших переменных. Это особенно часто встречается, когда вы используете объект с автоматическим освобождением ранее, не сохраняя значение, поэтому вы не являетесь владельцем объекта, он был освобожден ранее в цикле выполнения.

EDIT: Так как вы используете ивар, вы можете использовать @property (retain), чтобы убедиться, что ваш ивар правильно сохранен при его установке или использовании ключевого слова retain и обрабатывать счет удержания самостоятельно.

0 голосов
/ 08 марта 2011

EXC_BAD_ACCESS - исключение на уровне операционной системы, говорящее о том, что вы пытаетесь получить доступ к памяти, которая не принадлежит вашему приложению. Это обычно происходит, когда право собственности на объект преждевременно прекращается (отправка release на ранний срок), или когда вы явно не вступили во владение объектом, который должен иметь (используя retain). В этой ситуации вы можете сделать несколько вещей:

  1. Запустите статический анализатор , это поможет выявить случаи, когда вы пренебрегли правилами управления памятью .
  2. Включить зомби . Он сообщит вам, пытаетесь ли вы отправить экземпляр на освобожденный объект.
0 голосов
/ 08 марта 2011

EXC_BAD_ACCESS вызывается, когда вы отправляете сообщение объекту, который был освобожден.Скорее всего, в какой-то момент ранее в вашем коде вы освобождаете todaysDate или mostRecentDate, не устанавливая их равными nil, и таким образом отправляете сообщение освобожденному объекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...