iOS, жизненный цикл shared_ptr в коде target-c?

Я использую библиотеку MonkSVG, которая использует boost::shared_ptr типа (как я понимаю std::shared_ptr работает так же).

Как я понимаю, мне не нужно освобождать память от этого самостоятельно.

Я создал отдельный UIViewController с кодом из примера библиотеки, который определяет переменную shared_ptr и выдвигает / выдвигает этот контроллер представления. Но мне кажется, что с памятью что-то не так, или эта переменная работает не так, как я думаю. Проблема в деструкторе shared_ptr объект:

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

push / pop | shared_ptr | обычный объект

толчок | — | —

поп | — | деструктор

толчок | деструктор | —

поп | — | деструктор

и т.п.

Это нормальное поведение?

1

Решение

Поппинг (я полагаю, вы имеете в виду в UINavigationController) UIViewController не обязательно освободить его (вы можете переопределить его dealloc способ проверить это). UIViewController Экземпляр останется живым до тех пор, пока вы сохраняете сильную ссылку на него.

Однако, когда вы переназначаете UIViewController переменная, вы теряете сильную ссылку на старый экземпляр (если вы используете ARC), что приводит к его освобождению, что затем уничтожает любые shared_ptr переменные экземпляра.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]