问题描述
|
运行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
,按钮,小部件。分配,复制,保留的所有内容都将被释放。
有人知道这个线程池化,导致疯狂的内存泄漏吗?
提前致谢!
**** 2011年5月25日(日本时间上午11:35)***********
好的,我认为我已经设法确定内存问题的原因...这就是那些令人费解的“ AutoRelease UITableViewCells” ...在导致问题之前,它们并没有足够及时地被释放我的应用程序崩溃了...我只是查看了AppleTableViewCell API,但没有发现有关确定\'TV-Cell \'实际上是否为\'IN-USE'的信息。因为我的应用程序只能容纳30个每页存储单元,但是这些自动释放的单元一直在增长,直到出现内存不足警告(124个电视单元)。任何人...?知道如何安全释放这些...吗? –
我尝试使用常规的'Alloc \',然后释放直接从出队队列中出来的那个(只是,我知道至少有很多人正在释放,但正如预期的那样,我不知道,是否有可能在ViewDidUnload()中为(队列中的单元格)[释放单元格]并在整个队列中进行步枪来确保它们全部被杀死(当然,我不会使用自动发布)任何想法,任何IOS大师..?提前谢谢!– ChinaSailor 40秒前编辑
解决方法
您需要在启用了“僵尸”的情况下运行“仪器”,以便泄漏的对象在泄漏后可以检查。
仅在环境变量中包含NSZombieEnabled是不够的。您也必须在Instrument中将其打开。本教程对我有所帮助;如何使用XCode和Instruments教程调试内存泄漏。
, 我读到某处某人提到如果创建任何线程,它们必须位于主线程上? (WTF?这没有任何意义)。
false-您可以从主线程以外的其他线程创建线程。同意,这没有任何意义。
是的,我的应用程序使用线程,但仅用于呈现UIAlertViews,它们都被夹在[pool autorelease]和[pool release]之间,还有零未发布的NSString,按钮,小部件。分配,复制,保留的所有内容都将被释放。
有人知道这个线程池化,导致疯狂的内存泄漏吗?
在主线程上创建和操作UIKit对象。期。
祝好运!
(尽管该答案可能不是您所有/任何问题的确切原因,但从给出的说明来看,这是一个不错的选择,也是致命的缺陷)