Да, это не хороший способ освободить объекты. Выпуская объект A несколько раз в вашем методе dealloc (если он сохраняет count> 1), вы потенциально вытаскиваете коврик из-под любого другого объекта, который может использовать объект.
Вы должны освобождать объект только один раз (при условии, что вы сохраняете объект только один раз или выделяете его самостоятельно), если вы им владеете.
Для получения дополнительной информации о «владении» объектами я рекомендую прочитать Руководство по программированию управления памятью Apple по адресу:
http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html
Использование элемента Build and Analyze в меню Build вашего XCode должно помочь в поиске подобных проблем, если вы поймете основы управления памятью Objective-C
Как правило, метод dealloc должен выглядеть следующим образом:
-(void) dealloc
{
[self.objectA release];
[self.objectB release];
[super dealloc];
}
edit: Чтобы ответить на ваш первоначальный вопрос о том, почему вы получаете EXC_BAD_ACCESS, здесь недостаточно информации, чтобы определить, почему. Одной из возможных причин может быть то, что вы освобождаете объект в вашем подклассе, который также освобождается в методе dealloc вашего суперкласса. Но это всего лишь выстрел в темноте