Краткий ответ: никогда не выпускайте делегата приложения.
Пояснение:
Мне часто помогает решить проблемы с mem-mgmt, когда я проверяю, как все объявлено. Посмотрите, как объявлено свойство delegate
для UIApplication
:
@property(nonatomic,assign) id<UIApplicationDelegate> delegate;
Как видите, это назначенное свойство , означающее, что все mem-mgmt, выполняемое здесь, просто назначает указатели для переменной экземпляра. Это означает, что вызов release
для вашего делегата приложения приведет к выполнению метода -dealloc
для вашего MyAppDelegate
. Перейдите и попробуйте это в отладчике, и вы увидите, что ваше приложение получит EXC_BAD_ACCESS - то есть, оно потерпит крах.
РЕДАКТИРОВАТЬ: Однако, как предполагает Гоз, вы можете позвонить retain
, а затем release
. Но, во-первых, не имеет смысла делать это retain/release
с делегатом приложения.