Не полный ответ, но одна конкретная ситуация, в которой я получил это, когда пытаюсь получить доступ к объекту, который «умер», потому что я пытался использовать autorelease:
netObjectDefinedInMyHeader = [[[MyNetObject alloc] init] autorelease];
Так, например, я фактически передавал это как объект для «уведомления» (зарегистрировал его как слушателя, наблюдателя, независимо от того, что вы любите), но он уже умер, как только уведомление было отправлено, и я получил EXC_BAD_ACCESS , Изменение этого значения на [[MyNetObject alloc] init]
и последующее его высвобождение по мере необходимости устраняет ошибку.
Другая причина, по которой это может произойти, например, если вы передаете объект и пытаетесь сохранить его:
myObjectDefinedInHeader = aParameterObjectPassedIn;
Позже при попытке доступа к myObjectDefinedInHeader у вас могут возникнуть проблемы. Использование:
myObjectDefinedInHeader = [aParameterObjectPassedIn retain];
может быть то, что вам нужно. Конечно, это всего лишь несколько примеров того, с чем я столкнулся, и есть другие причины, но они могут оказаться неуловимыми, поэтому я упомяну их. Удачи!