Я использую библиотеку MonkSVG, которая использует boost::shared_ptr
типа (как я понимаю std::shared_ptr
работает так же).
Как я понимаю, мне не нужно освобождать память от этого самостоятельно.
Я создал отдельный UIViewController
с кодом из примера библиотеки, который определяет переменную shared_ptr и выдвигает / выдвигает этот контроллер представления. Но мне кажется, что с памятью что-то не так, или эта переменная работает не так, как я думаю. Проблема в деструкторе shared_ptr
объект:
я думаю что shared_ptr
деструктор объекта должен вызываться каждый раз, когда я добавляю к нему контроллер вида. Но он вызывается, когда я назначаю этой переменной только другой экземпляр. Это выглядит примерно так:
push / pop | shared_ptr | обычный объект
толчок | — | —
поп | — | деструктор
толчок | деструктор | —
поп | — | деструктор
и т.п.
Это нормальное поведение?
Поппинг (я полагаю, вы имеете в виду в UINavigationController
) UIViewController
не обязательно освободить его (вы можете переопределить его dealloc
способ проверить это). UIViewController
Экземпляр останется живым до тех пор, пока вы сохраняете сильную ссылку на него.
Однако, когда вы переназначаете UIViewController
переменная, вы теряете сильную ссылку на старый экземпляр (если вы используете ARC), что приводит к его освобождению, что затем уничтожает любые shared_ptr
переменные экземпляра.
Других решений пока нет …