首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当仪器中的内存使用率较低时,OS 3.2会丢弃应用程序

当仪器中的内存使用率较低时,OS 3.2会丢弃应用程序
EN

Stack Overflow用户
提问于 2010-09-22 20:16:18
回答 1查看 431关注 0票数 1

问题来了。我有一个应用程序,本质上是一个图片库,它从xml提要中拉下图像,并在本地存档,然后逐渐加载5个图像到滚动视图中显示。

我在使用UIImage imageNamed时遇到了成千上万的问题:...和NSURLRequest/NSData都会导致应用程序缓存过多的数据。无论如何,我现在让应用程序以几乎恒定的25-30MB运行,没有突然的峰值,并且只有几个kB的数据从内存中泄漏(由于NSKeyedArchiver和我保留了一些值)。然而,应用程序总是被操作系统终止(似乎)没有明显的原因。

抱歉,如果我有点愚蠢,没有发现什么,崩溃报告似乎确实告诉我,应用程序已经对大量内存进行了分页,但是分配和泄漏工具却告诉我一个不同的故事……实际上,我的问题更像是“为什么仪器要对我撒谎?”

代码语言:javascript
复制
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的“真实内存”读数,这是不是因为在另一个线程上分配了内存,而分配工具没有接收到?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-22 21:00:08

您应该知道NSImage#imageNamed:缓存了图像。换句话说,您失去了对这些图像的生命周期的精细控制。改为使用NSImage#initWith...,则不会使用缓存。

还要知道,下载大小为2KB的.png镜像在加载到UIImage中时很容易变成6MB的镜像。图像数据在加载到UIImage中时会被解压缩,所以不要太看重原始大小。看看位图的大小。通常是简单的width * height * 4

您提到NSURLConnectionNSData导致了内存问题。这可能是因为使用不当。比如没有做好适当的内存管理。

如果您想获得更好的资源管理提示,请发布代码或更多详细信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3769081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档