25个左右的相机使用后,UIImagePickerController相关的代码崩溃应用程序

时间:2009-09-01 16:22:45

标签: iphone uikit

我通过UIImagePickerController读取了一些内存泄漏问题,所以我将代码更改为使用成员变量,并且能够使用相机拍摄多张图片。然而,我发现拍照需要花费更长时间,最终它会在大约25张照片中崩溃。

我在didFinishPickingMediaWithInfo中的照片后做了两件事,

1)缩小图像并显示(50x50) 2)将320x460保存到CoreData

我没有发布任何UIImage,因为它位于自动释放池中。

我应该怎么做才能让拍照继续下去?

以下是崩溃日志(崩溃日志类型列为低内存)

CrashReporter Key:   8e197e26271ae3c2c4d3e725807d023e3c2354cb
OS Version:          iPhone OS 3.0 (7A341)

Free pages:        251
Wired pages:       10127
Purgeable pages:   0
Largest process:   Journal

Processes
         Name                 UUID                    Count resident pages
         Journal     8960 (jettisoned) (active)
     debugserver      130
     MobilePhone      529 (jettisoned)
    syslog_relay       53
notification_pro       54
      DTMobileIS     2285
notification_pro       53
            ptpd      276
    mediaserverd      252
     debugserver       77
     debugserver       78
     SpringBoard     2470 (active)
         notifyd       80
        BTServer      123
      CommCenter      262
      accessoryd       84
         configd       70
         configd      266
       fairplayd       67
   mDNSResponder       89
       lockdownd      252
         syslogd       82
         launchd       70

2 个答案:

答案 0 :(得分:0)

  • 您能提供回溯/更多崩溃信息吗?
  • 是否有可能自己管理UIImage,或者使用自己的UIImage打包给您自动释放NSAutoreleasePool的电话,以便控制其生命周期?
  • 您是否尝试使用Instruments检测是否存在任何可能的内存泄漏?

答案 1 :(得分:0)

这个问题已经很老了,所以希望已经解决了,但考虑了两点:

  1. CoreData是一个拯救BLOBS的好地方,它非常擅长文本,但对二进制数据来说并不是那么多。
  2. 你的图像将存在于内存中,直到你给它一些其他的去处,让它们从内存中消失的唯一方法是释放对该数据的所有引用。
  3. 我会考虑将您的图像缓存到文件系统,直到再次需要它们为止。基本上遵循这个过程:

    • Capture Image1
    • 想要另外一个?捕获Image2并将Image1写入磁盘。
    • 将Image1的文件名存储在CoreData中,以便稍后进行撤销。

    根据需要重复。

    最终可能会耗尽磁盘空间,但是你将拥有比内存更多的可用磁盘空间,并且你总是可以从磁盘中清除不需要的映像或强迫用户在其他一些磁盘空间中处理它们方便的方式(例如上传到云端)。