我使用 MonkSVG 库,它使用 boost::shared_ptr
类型(据我所知,std::shared_ptr
的工作方式相同)。
据我所知,我不需要自己释放内存。
我使用库示例中的代码创建了一个单独的 UIViewController
,该示例定义了 shared_ptr 变量并推送/弹出此 View Controller 。但似乎内存有问题,或者这个变量没有按照我认为的方式工作。问题出在 shared_ptr
对象的析构函数中:
我认为每次弹出 View Controller 时都必须调用 shared_ptr
对象的析构函数。但是当我只为这个变量分配另一个实例时它被调用。它看起来像下面这样:
推/弹出 | shared_ptr |平常的对象
推 | - | -
流行 | - |析构函数
推 |析构函数 | -
流行 | - |析构函数
等等
这是它的正常行为吗?
最佳答案
弹出(我假设你的意思是在 UINavigationController
中)UIViewController
不一定会释放它(你可以覆盖它的 dealloc
方法来检查那)。只要您保持对它的强引用,UIViewController
实例就会保持事件状态。
然而,当您重新分配您的 UIViewController
变量时,您将失去对旧实例的强引用(如果您使用 ARC),这会导致它被释放,然后销毁任何 shared_ptr
实例变量。
关于c++ - iOS,objective-c 代码中的 shared_ptr 生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19707039/