【问题标题】:Navigation arc memory not released导航弧内存未释放
【发布时间】:2013-03-29 12:56:26
【问题描述】:

我有两个表表控制器 A 和 B。 A 有一个项目列表,当单击一个项目时,它会推送到 B。 问题是,当显示 B 时,仪器指示实时内存增加,但当我单击后退按钮时它并没有减少。 B 中的 dealloc 方法已执行,但内存似乎略有变化。 我检查了 B 没有保留在其他任何地方,那么可能导致此问题的原因是什么?

在 B 中,有许多文本字段,标签是非原子的和强的。我用代码而不是使用 xibs 来绘制它们。如果我注释了初始化它们的代码并将它们添加到表头视图中,那么问题就消失了。

顺便说一下,我用的是 Arc 和模拟器 6.1。

【问题讨论】:

  • 如果你正在做很多绘图,你确定要调用 CFRelease/CGRelease 等吗?当您在代码上运行静态分析器时会发生什么?
  • leaks 工具是否报告了什么?另外,你在B上做什么?任何图像(使用imageNamed 缓存)任何网络活动?你说的内存是多少?根据您在 B 中所做的事情,您不会看到实时字节数下降一点也不稀奇,因为 iOS 在幕后做了各种可能影响它的事情。我只担心(a)报告的泄漏; (b) 大量丢失在didReceiveMemoryWarning 上未解除的“活动字节”。

标签: ios memory-management automatic-ref-counting


【解决方案1】:

在我看来,B 中的某些文本字段/标签可能对 B 本身有一些强引用,这使得 arc 无法释放它们,因为 B 有一个强指针指向其中的元素,并且这个元素有一个强指针给B。

据我所知,这不是文本字段/标签的默认行为,但也许你已经对它们进行了子类化...

除了用你提供的少量信息猜测之外,很难尝试任何事情

【讨论】:

  • 据我所知,这不是文本字段/标签的默认行为,如果我不想使用 xib,请问它们的默认行为是什么?
【解决方案2】:

您需要在视图控制器上下文中访问视图吗?不能给它们分配一个标签,当你需要更改它们时,从 tableview 标题中检索它们吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2017-03-13
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多