Iphone“;设备“;内存泄漏

Iphone“;设备“;内存泄漏,iphone,multithreading,memory,memory-leaks,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 < mult

运行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 
泄漏对象#地址大小负责库负责帧
GeneralBlock-64 9576 UIKit GetContextStack
GeneralBlock-16 7112 WebCore WebThreadCurrentContext
UIControl目标操作5<多个>160 UIKit-[UIControl添加目标:操作:forControlEvents:]
__NSArrayM 5160 UIKit-[UIControl添加目标:操作:forControlEvents:]
UI5按钮<多个>720
废话,废话,废话

我读过一些关于某人的文章,提到如果你创建任何线程,它们必须在主线程上?(WTF?那没有任何意义)

是的,我的应用程序使用线程,但只渲染
UIAlertView
,它们都夹在
[pool autorelease]
[pool release]
之间,没有未发布的
NSString
、按钮和小部件。所有被分配、复制、保留、释放的东西

有人知道这个线程会导致大量内存泄漏吗

提前谢谢

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


好的,我想我已经设法确定了我的记忆问题的原因。。。是那些fricken'AutoRelease UITableViewCells'。。。在它们导致我的应用程序崩溃之前,它们并没有及时发布。。。我只是浏览了AppleTableViewCell API,没有看到任何关于确定“电视单元”是否实际“正在使用”的信息。因为我的应用程序每页只能容纳30个单元,但这些自动释放单元一直在增长,直到我收到内存不足警告(124个电视单元)。任何人知道如何安全释放这些…?-


我试过使用常规的“Alloc”,并释放直接从队列中出来的一个(我知道至少有一个好的数字被释放了,但正如预期的那样,它不喜欢那样..所以我想知道,是否有可能对(队列中的单元格)[释放单元格]执行类似ViewDidUnload()的操作然后用步枪扫射整个队列,以确保他们都被杀了(当然我不会使用自动释放)任何想法,任何IOS大师……提前谢谢你!–Chinasaler 40秒前编辑

你需要在启用僵尸的情况下运行仪器,以便在泄漏的对象泄漏后可以检查它们

仅在环境变量中启用NSZombie是不够的。您还必须在Instrument中启用它。本教程对我有所帮助

我读过一些关于某人的文章,其中提到如果你创建任何线程,它们必须在主线程上?(WTF?那没有任何意义)

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

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

有人知道这个线程会导致大量内存泄漏吗


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

祝你好运


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

一个泄漏的对象可能会导致许多其他对象泄漏……在大多数Cocoa代码中,您不应该(阅读:不需要)使用NSAutoReleasePool(除非您正在实现异步NSO操作或类似性质的操作)。我想看看您如何在代码中使用NSAutoReleasePool的示例。您可能读到的是,您应该只更新UI(UIKit)主线程上的元素。好的,不完全确定如何在仪器中具体启用NSZombies,因为我使用的xcode(3.2.5版)启用了Zombies,根据我在网上看到的关于使用Zombies设置仪器的教程,它完全没有在“target”下的那些选项…它没有显示,就像教程的任何版本一样…它给了我几个选项来“忽略”以“NS”开头的分配,但没有像网站那样的NSZombieEnable…谢谢…“在主线程上创建和操作UIKit对象。句号。”好的,我从来没有听说过这方面的任何事情,除了你显然不想与试图同时访问相同内存的线程发生冲突,如果这是你的意思…我读过,不要产生任何线程来进行主图形处理,因为苹果在主线程上处理,但这只是因为线程collisions,不是因为悬空指针和未释放的内存…还是…?谢谢!是因为UIKit(和AppKit)不是为了线程安全而设计的。它们只是为了从主线程进行操作而设计的。关于这些对象,您可以做的唯一可移植的假设是,它们应该完全从主线程创建和操作。尽管从技术上讲,除此之外,还有一些事情是可以避免的-不要为它们操心现在,坚持仅从主线程进行操作和创建。不客气。我只需编写如下内容:
assert([NSThread isMainThread])
好的,我想我已经设法确定了我的内存问题的原因…是那些fricken'AutoRelease UitableViewCell'…在它们导致我的应用程序崩溃之前,它们没有得到及时的释放…我只是查看了AppleTableViewCell API,我没有看到任何关于确定“TV Cell”是否真的是“in-U”的信息因为我的应用程序每页只能容纳30个单元格,但这些自动释放的单元格