Я бы попытался установить все делегаты вашего ивара в ноль (РЕДАКТИРОВАТЬ: в dealloc). У меня была похожая проблема с контроллером полученных результатов. Не удалось установить для его делегата значение nil в dealloc, и в стеке данных ядра все еще имел указатель на него, когда контроллер представления был освобожден.
Так вот, моя ставка, установите для делегатов ivar значение nil в dealloc, хотя я не вижу вашего заголовка, чтобы знать, какие протоколы вы соответствуете, чтобы быть уверенным.
РЕДАКТИРОВАТЬ: Объяснение
Установка делегата на самом деле дает объекту, который выполняет делегирование, указатель (я полагаю, что это обычно назначенное свойство).
@property (assign) delegate;
Я буду использовать проблему, которую я имел в качестве примера.
Итак, допустим, у вас есть контроллер представления, у которого есть fetchedResultsController в качестве ивара. При установке делегата FRC:
fetchedResultsController.delegate = self;
и контроллер представления освобождается, любой объект, который использует этот указатель, все еще думает, что он живой. Вы могли бы подумать, что поскольку FRC выпускается и в dealloc, у вас все будет в порядке (поэтому мне потребовалось 4 дня, чтобы понять это :)), но иногда другие части реализации также используют вашего делегата. Итак, исправление:
-(void)dealloc
{
self.fetchedResultsController.delegate = nil;
[_fetchedResultsController release];
[super dealloc];
}
Примечание: как только новые инструменты станут доступны всем, вам больше не придется об этом беспокоиться ^ ^;