如何在 iphone 中释放系统库分配(框架相关)

Posted

技术标签:

【中文标题】如何在 iphone 中释放系统库分配(框架相关)【英文标题】:how to release the system libraries allocations in iphone(Frame work related) 【发布时间】:2011-09-23 05:17:48 【问题描述】:

我面临系统库分配的大问题。 我没有从我的应用程序中得到任何泄漏,仍然有这么多的分配。我附上了各种屏幕截图。在我的应用程序中使用自定义选择器从断言库中获取所有图像。这些图像是从选择器中选择的,在滚动视图上显示图像。

当我的应用程序在滚动视图上有 35 个图像时它的屏幕截图。如果我再次从自定义选择器分配中选择图像增加。我看到对象详细信息都与框架工作分配有关。不是来自我的应用程序 看到分配对象列表响应库是DYLD. 这是我的泄漏屏幕截图

我们如何释放这些分配?请帮帮我?

【问题讨论】:

【参考方案1】:

仅仅因为您没有泄漏并不意味着您正在正确管理内存。你所拥有的就是我所说的内存膨胀——你保留它的时间比你需要的要长。 (泄漏是分配了没有引用的内存。膨胀是分配了有引用但应该没有引用的内存。)

http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/ 会给你一些使用 Instruments 找到它们的好策略。 (这是一个非常可靠的消息来源,据我所知,他仍在 Apple 工作。)

【讨论】:

这些分配会自动释放吗?【参考方案2】:

确保您的应用程序没有泄漏的对象,它们也会在仪器中消失。当然它指向一个系统库,但它总是你的错误的结果。选择其中一个并打开正确的视图。可能它会向您显示正确的代码堆栈和分配的代码行。 您可以做的另一件事:运行静态分析器 Product->Analyze 它会发现所有(至少大部分)泄漏;)

【讨论】:

是的,我正在这样做。但是分配非常高,那些响应库是 FrameWork Names 然后在你的内存密集型代码周围放置一个自动释放池,操作后它会缩小。问题是即使您调用 dealloc,对象也不会被释放(不要问我为什么)。 NSAutoreleasePool 将释放池中分配的所有对象。 你永远不应该自己调用 dealloc。改为发送释放(或自动释放)。 @David Dunham 抱歉,但我在哪里写他必须写 dealloc? ……对不起,我发现了,我的意思是“……即使你打电话给释放”

以上是关于如何在 iphone 中释放系统库分配(框架相关)的主要内容,如果未能解决你的问题,请参考以下文章

Swift 5:如何释放由共享库分配的内存

分配给 iphone sdk 中已分配的变量

C ++释放共享库中动态分配的内存导致崩溃

在 C 中退出程序时释放所需的分配内存

我应该如何释放类型映射中为 argout 结构数组分配的内存?

python 学习