1

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

据我了解,我不需要自己从中释放内存。

我从库示例中创建了一个单独UIViewController的代码,该示例定义了 shared_ptr 变量并推送/弹出此视图控制器。但似乎内存有问题,或者这个变量不像我想的那样工作。问题出在shared_ptr对象的析构函数中:

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

推/弹出 | shared_ptr | 通常的对象

推 | - | -

流行 | - | 析构函数

推 | 析构函数 | -

流行 | - | 析构函数

等等

这是它的正常行为吗?

4

1 回答 1

1

弹出(我假设你的意思是在 a 中UINavigationController) aUIViewController不一定会释放它(你可以覆盖它的dealloc方法来检查它)。UIViewController只要您保持对它的强引用,该实例就会保持活动状态。

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

于 2013-10-31T12:59:07.840 回答