NSAutoreleasePool сток выпускает +1 больше, чем количество отправленных авто-релизных сообщений - PullRequest
1 голос
/ 14 сентября 2011

У меня возникли проблемы с отладкой приложения для iPhone, которое воспроизводимо не работает.

Рассказ: Пользовательский UIViewController выделяется и помещается в стек UINavigationController. Через некоторое время UIViewController извлекается из стека. При следующем нажатии UIViewController на стек приложение перестает работать.

Стандартная процедура для любого сбоя - использование инструментов с включенной NSZombie. При осмотре истории объекта выясняется, что я не понимаю:

  • объект получает 2 (два) autorelease сообщения и
  • метод стока NSAutoreleasePool отправляет 3 (три) сообщения об освобождении

Пока что единственный способ предотвратить сбои - НЕ отправлять 1 (одно) сообщение об отпускании объекту, о котором идет речь, и, таким образом, поднимать красный флаг для утечек памяти, только если он не протекает.

Есть ли другое решение, которое я упустил из виду?

Обновление: Как один из вас указал на очевидное:

У вас есть проблема в вашем коде. Ничего общего с автоматическим сливом из бассейна.

Оказалось, что первый UIViewController был передан в качестве делегата на UINavigationController, поэтому я запутался, когда поступил вызов Zombie от самого контроллера навигации.

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

...