Это нормальное соглашение, что делегаты не сохраняются. Это происходит главным образом потому, что обычный шаблон состоит в том, что владельцем объекта часто является также его делегат, и если бы делегат был сохранен, вы получите цикл сохранения.
Если вы используете свойство, объявите его следующим образом:
@property (assign) DelegateType delegate; // replace "DelegateType" with whatever type you need
И удалите строку в -dealloc
, которая освобождает делегата.
Если средства доступа синтезированы, то все готово. Если нет, сделайте так, чтобы аксессоры присваивали аксессоры, например,
-(DelegateType) delegate
{
return delegate;
}
-(void) setDelegate: (DelegateType) newValue
{
delegate = newValue;
}