[英]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.