我使用的是使用boost::shared_ptr
类型的MonkSVG库(据我所知std::shared_ptr
以同样的方式工作)。
据我了解,我不需要自己释放记忆。
我创建了一个单独的UIViewController
,其中包含来自库示例的代码,该代码定义了shared_ptr变量并推送/弹出此视图控制器。但是内存似乎有问题,或者这个变量在我认为不起作用。问题出在shared_ptr
对象的析构函数中:
我认为每次用它弹出视图控制器时都必须调用shared_ptr
对象的析构函数。但是当我仅为此变量分配另一个实例时调用它。它看起来像下面这样:
push / pop | shared_ptr |通常的对象
推送| - | -
pop | - |析
推送|析构函数| -
pop | - |析
等
这是正常行为吗?
答案 0 :(得分:1)
弹出(我假设你的意思是在UINavigationController
中)UIViewController
不一定要解除分配(你可以覆盖它的dealloc
方法来检查)。 UIViewController
实例只要您对它有强烈的引用,它就会保持活着状态。
但是,当您重新分配UIViewController
变量时,您将丢失对旧实例的强引用(如果您使用ARC),这会导致它被释放,然后会破坏任何shared_ptr
实例变量。