问题来了。我有一个应用程序,本质上是一个图片库,它从xml提要中拉下图像,并在本地存档,然后逐渐加载5个图像到滚动视图中显示。
我在使用UIImage imageNamed时遇到了成千上万的问题:...和NSURLRequest/NSData都会导致应用程序缓存过多的数据。无论如何,我现在让应用程序以几乎恒定的25-30MB运行,没有突然的峰值,并且只有几个kB的数据从内存中泄漏(由于NSKeyedArchiver和我保留了一些值)。然而,应用程序总是被操作系统终止(似乎)没有明显的原因。
抱歉,如果我有点愚蠢,没有发现什么,崩溃报告似乎确实告诉我,应用程序已经对大量内存进行了分页,但是分配和泄漏工具却告诉我一个不同的故事……实际上,我的问题更像是“为什么仪器要对我撒谎?”
Incident Identifier: D258E503-D024-4265-B079-E6C47DE5DA29
CrashReporter Key: c3904eb2c9cf4bf4f89f53fb9c836ad44586684f
OS Version: iPhone OS 3.2.1 (7B405)
Date: 2010-09-21 13:27:50 +0100
Free pages: 464
Wired pages: 12587
Purgeable pages: 0
Largest process: MediaLib
Processes
Name UUID Count resident pages
MediaLib <6db92ce87a5d7e287702f2cb87ba8c53> 30579 (jettisoned) (active)
debugserver <f885fe2348e72988381a73137cc90c7b> 127
notification_pro <4c9a7ee0a5bbe160465991228f2d2f2e> 64
notification_pro <4c9a7ee0a5bbe160465991228f2d2f2e> 64
afcd <ddda2413b8953e5c56721dfe05a82d78> 68
syslog_relay <1c73f841b191556b6911bc6b4736b50f> 63
DTMobileIS <b34df288cd9a07a995933bbd6b66717a> 1169
notification_pro <4c9a7ee0a5bbe160465991228f2d2f2e> 64
ptpd <e3f855cfd629600a4812e7e90c77667e> 191
syslogd <6990426209e51a8ee13c91cd1a050a2e> 78
mediaserverd <2eda3ce5e1c8a1a4d7b8271cef1f2d12> 314
debugserver <f885fe2348e72988381a73137cc90c7b> 74
debugserver <f885fe2348e72988381a73137cc90c7b> 74
debugserver <f885fe2348e72988381a73137cc90c7b> 74
lsd <eb108595d2a932a8d244d1ab7386cd0f> 121
apsd <0775f0d80d1cd1fb4b562d2f94caf051> 172
notifyd <74e4a487a89c31f68917b22605baf6c6> 68
BTServer <21dd98c0ab29b910cd51cb703a9cb9b9> 107
CommCenter <e4b9cc04f083f22232c92ee1363fe669> 170
SpringBoard <745085d9a24a8529f0ceb6c33d766873> 4821 (active)
accessoryd <59ca0ba146c28bf5c8ab6e3d2e81bbad> 97
configd <36001fe17103f8af6d3b525cb23ac8a0> 305
fairplayd.K48 <2d997ffca1a568f9c5400ac32d8f0782> 85
locationd <60fd4d90fec18a76ffc0b8a45351fe54> 600
mDNSResponder <a6f01dd493e3d2bfe318f5d44f8508e2> 107
lockdownd <378f09833cdc57b1b60e42d79c355938> 273
MobileStorageMou <7f2cd9f90fab302a42a63460b1c4d775> 67
launchd <880e75c2db9c0f670516c58935e89b58> 80
**End**提前感谢能给我一记耳光并为我指明正确方向的人;)
编辑:
我刚刚通过活动监视器工具运行了应用程序,这给了我一个65-80MB的“真实内存”读数,这是不是因为在另一个线程上分配了内存,而分配工具没有接收到?
发布于 2010-09-22 21:00:08
您应该知道NSImage#imageNamed:缓存了图像。换句话说,您失去了对这些图像的生命周期的精细控制。改为使用NSImage#initWith...,则不会使用缓存。
还要知道,下载大小为2KB的.png镜像在加载到UIImage中时很容易变成6MB的镜像。图像数据在加载到UIImage中时会被解压缩,所以不要太看重原始大小。看看位图的大小。通常是简单的width * height * 4。
您提到NSURLConnection和NSData导致了内存问题。这可能是因为使用不当。比如没有做好适当的内存管理。
如果您想获得更好的资源管理提示,请发布代码或更多详细信息。
https://stackoverflow.com/questions/3769081
复制相似问题