iOS,在objective-c代码中的shared_ptr生命周期?

时间:2013-10-31 12:52:19

标签: c++ ios objective-c uiviewcontroller push

我使用的是使用boost::shared_ptr类型的MonkSVG库(据我所知std::shared_ptr以同样的方式工作)。

据我了解,我不需要自己释放记忆。

我创建了一个单独的UIViewController,其中包含来自库示例的代码,该代码定义了shared_ptr变量并推送/弹出此视图控制器。但是内存似乎有问题,或者这个变量在我认为不起作用。问题出在shared_ptr对象的析构函数中:

我认为每次用它弹出视图控制器时都必须调用shared_ptr对象的析构函数。但是当我仅为此变量分配另一个实例时调用它。它看起来像下面这样:

push / pop | shared_ptr |通常的对象

推送| - | -

pop | - |析

推送|析构函数| -

pop | - |析

这是正常行为吗?

1 个答案:

答案 0 :(得分:1)

弹出(我假设你的意思是在UINavigationController中)UIViewController不一定要解除分配(你可以覆盖它的dealloc方法来检查)。 UIViewController实例只要您对它有强烈的引用,它就会保持活着状态。

但是,当您重新分配UIViewController变量时,您将丢失对旧实例的强引用(如果您使用ARC),这会导致它被释放,然后会破坏任何shared_ptr实例变量。