Отпустив ссылку на результаты делегата UIApplication в EXC BAD ACCESS, почему? - PullRequest
0 голосов
/ 17 августа 2010

Я запускаю свое приложение через статический анализатор xcode, и он указал, что у меня есть потенциальная утечка в файле:

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

Итак, после кода я делаю [delegate release]. Это приводит к EXC BAD ACCESS, когда контроллер представления, которым я занимаюсь, помещает новый контроллер представления в стек навигации. Если я это закомментирую, это нормально.

Я пробежал через отладчик, и он на самом деле не падает, когда освобождается ссылка на делегат, а только при нажатии следующего контроллера.

Это не код, который выполняется между объявлением и выпуском, когда я пытался закомментировать его, чтобы увидеть, что происходит.

Ответы [ 2 ]

3 голосов
/ 17 августа 2010

Вызов метода delegate не сохраняет объект.Так что вы не должны отвечать за его выпуск.Вы уверены, что статический анализатор ссылается на эту конкретную строку кода?UIApplication сам не сохраняет, но назначает делегата.

3 голосов
/ 17 августа 2010

В вашем коде вы просто получаете ссылку на объект-делегат приложения и нигде не сохраняете его - поэтому вы не должны его освобождать.

Так что либо статический анализатор выдает здесь ложное срабатывание, либо есть какая-то другая ошибкакод вокруг.Но, опять же, учитывая только эту строку, вы не должны освобождать делегата.

...