繁体   English   中英

Iphone“设备”memory 泄漏

[英]Iphone “Device” memory leaks

运行 xcode-> 使用仪器运行 -> 泄漏后,使用细齿梳检查模拟器后,(模拟器)仪器 -> 泄漏显示为零。 但是当我运行实际设备时,我会得到一个大约 100 多个项目的列表,

Leaked Object   #   Address Size    Responsible Library Responsible Frame
GeneralBlock-64 9   < multiple >    576 UIKit   GetContextStack
GeneralBlock-16 7   < multiple >    112 WebCore WebThreadCurrentContext
UIControlTargetAction   5   < multiple >    160 UIKit   -[UIControl addTarget:action:forControlEvents:]
__NSArrayM  5   < multiple >    160 UIKit   -[UIControl addTarget:action:forControlEvents:]
UIButton    5   < multiple >    720 

等等等等等等..

我在某处读到有人提到如果你创建任何线程,它们必须在主线程上? (WTF?这没有任何意义)。

是的,我的应用程序使用线程,但仅用于呈现UIAlertViews并且它们都夹在[pool autorelease][pool release]之间,有零个未发布的NSStrings 、按钮、小部件。 所有被分配、复制、保留、释放的东西。

有人知道这个线程会被池化,导致疯狂的 memory 泄漏吗?

提前致谢!

** * * 2011 年 5 月 25 日(日本时间上午 11:35) * ** * ** * ** * *

好的,我想我已经设法确定了我的 memory 问题的原因......这是那些 fricken 'AutoRelease UITableViewCells'......他们没有及时发布,在他们导致我的应用程序崩溃之前...... . 我只是查看了 AppleTableViewCell API 并没有看到任何关于确定“TV-Cell”是否实际上是“IN-USE”的信息。 因为我的应用程序每页只能容纳 30 个单元格,但这些自动释放单元格一直在增长,直到我收到 memory 低警告(124 个电视单元格)。 任何人...? 知道我怎样才能安全地释放这些......?

我尝试过使用常规的“Alloc”,并释放直接从 De-queue 中出来的那些,(只是为了让我知道至少有一个很好的数字被释放,但正如预期的那样,它不喜欢那样。 . 所以我想知道,是否有可能在 ViewDidUnload() for(cells in queue) [release cell] 中执行类似的操作并遍历整个队列,以确保它们都被杀死(当然我不会使用 auto- release) Any Ideas, Any IOS Guru..? 先谢谢你了! – ChinaSailor 40 秒前编辑

您需要在启用 Zombies 的情况下运行 Instruments,以便您的泄漏对象在泄漏后可以进行检查。

仅在环境变量中有 NSZombieEnabled 是不够的。 您也必须在 Instrument 中打开它。 本教程帮助了我; 如何使用 XCode 和仪器教程调试 Memory 泄漏

我在某处读到有人提到如果你创建任何线程,它们必须在主线程上? (WTF?这没有任何意义)。

false - 您可以从主线程以外的线程创建线程。 同意,这没有任何意义。

是的,我的应用程序使用线程,但仅用于呈现 UIAlertViews,它们都夹在 [pool autorelease] 和 [pool release] 之间,有零个未发布的 NSStrings、按钮、小部件。 所有被分配、复制、保留、释放的东西。

有人知道这个线程会被池化,导致疯狂的 memory 泄漏吗?

在主线程上创建和操作 UIKit 对象。 时期。

祝你好运!

(尽管该答案可能不是您所有/任何问题的确切原因——从给出的描述来看,它是一个很好的候选和致命缺陷)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM