Iphone“设备”内存泄漏

时间:2011-05-24 03:16:19

标签: iphone multithreading memory 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 

Blah,Blah,Blah ..

我读了一些关于有人提到如果你创建任何线程,他们必须在主线程? (WTF?没有任何意义)。

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

任何人都知道这个线程会被池化,导致内存泄漏吗?

提前致谢!

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

好吧,我想我已经设法确定了我的记忆困难的原因......这是那些fricken'AutoRelease UITableViewCells'......他们没有得到及时释放,在他们导致我的应用程序之前崩溃...我刚看了AppleTableViewCell API,我没有看到任何关于确定'TV-Cell'是否实际上是'使用中'的信息。因为我的应用程序每页只能容纳30个单元格,但这些自动释放单元格一直在增长,直到我得到内存低警告(124个电视单元格)。任何人...?知道如何安全释放这些......? -

我尝试过使用常规的'Alloc',然后释放直接从De-queue出来的那个,(只是我知道至少有一个好的号码正在发布,但正如预期的那样,它没有那样的..所以我想知道,如果有可能在ViewDidUnload()中为(队列中的单元格)[释放单元格]和整个队列中的步枪做一些事情,以确保它们都被杀死(当然我不会使用自动释放)任何想法,任何IOS大师..?提前谢谢! - ChinaSailor 40秒前编辑

2 个答案:

答案 0 :(得分:2)

你需要运行带有僵尸的乐器,这样你的泄漏对象可以在它们泄露后进行检查。

仅在环境变量中使用NSZombieEnabled是不够的。你也必须在乐器中打开它。本教程帮助了我; How To Debug Memory Leaks with XCode and Instruments Tutorial

答案 1 :(得分:1)

  

我读了一些关于有人提到如果你创建任何线程,他们必须在主线程? (WTF?没有任何意义)。

false - 您可以从主线程以外的线程创建线程。同意,这毫无意义。

  

是的,我的应用程序使用线程,但仅用于渲染UIAlertViews并且它们都夹在[pool autorelease]和[pool release]之间,还有ZERO未发布的NSStrings,按钮,小部件。分配,复制,保留的所有内容都会被释放。

     

任何人都知道这个线程会被池化,导致内存泄漏吗?

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

祝你好运!

(虽然这个答案可能不是你所有/任何问题的确切原因 - 但这是一个很好的候选人,并且从给出的描述中有致命的缺陷)

相关问题