【问题标题】:App crashes after showing memory warning in ios 5.1.1 only while taking image from camera仅在从相机拍摄图像时,应用程序在 ios 5.1.1 中显示内存警告后崩溃
【发布时间】:2012-05-29 16:33:00
【问题描述】:

嗨,我在 SO this too 上遇到了很多问题,但它对 ios 5.1.1 没有帮助。当我拍摄前 2 次图像时,它工作正常,然后第 n3 次应用程序显示内存警告并崩溃。这里是我的代码:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[picker dismissModalViewControllerAnimated:YES];

UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    if (image) {

    if ([appdel.arrImageData count]==0) {
        count=0;

    }
    count++;
    [appdel.arrImageData addObject:[image copy]];
}}

任何帮助将不胜感激。

【问题讨论】:

    标签: iphone crash uiimagepickercontroller


    【解决方案1】:

    每次你拍照时,你都会在 arrImageData 中保存一份副本,这样就会填满内存,直到 iOS 杀死你的应用程序,因为你占用了太多内存。重新考虑您的设计,以便您只在内存中保留一张图像。如果您出于某种原因需要所有图片,请将其保存在文档或缓存目录中并清理内存,然后再拍摄另一张照片。

    【讨论】:

    • 不,我不能这样做,因为我必须在同一页面的滚动视图中显示我添加的图像
    • 好的,你不能显示使用相当少内存的图像的缩略图。现在你的内存中有几张高分辨率图像,你的滚动视图可能不需要高分辨率
    • 但我猜是为视频创建了拇指。是否可以为图像创建?
    • 你必须自己做,看看icab.de/blog/2010/10/01/…我自己做的,但它似乎是4行代码;)
    • 如果您将图像以 jpeg 格式写入磁盘,然后通过读取这些 jpeg 图像创建新图像,UIImage 将在必要时自动从 RAM 中删除图像并再次从磁盘中读取它们以避免您的应用崩溃。
    【解决方案2】:

    我更正了你的代码检查它是否有帮助

      - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    
    
        UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
            if (image) {
    
            if ([appdel.arrImageData count]==0) {
                count=0;
    
            }
            count++;
            [appdel.arrImageData addObject:[image copy]];
        }
    
    [picker dismissModalViewControllerAnimated:YES];
    [picker release];
    }
    

    【讨论】:

      【解决方案3】:

      我没有看到 ImagePickerController 的内存管理。但是在我调用了dismissModal之后,我在解除分配我的选择器时遇到了问题......

      在获取图像后尝试关闭模态视图和选择器。

      更新: 我同意你的看法。我有太多与试图让 pickerController 在从 iOS 3 到 5 的多个设备上的许多 iOS 版本相关的问题。结果我跳过了对 iOS 3 的支持,并开始实现自己的代码来处理基于 @ 的图片和电影987654321@,AV Foundation Framework Reference.

      【讨论】:

        【解决方案4】:

        应用程序在使用UIImagePickerController 时经常收到内存警告。发生的情况是,当您一次又一次地拍摄图像并拍摄图像时,您的内存每次都在不断增加(如果您没有正确管理内存。在我的情况下,它曾经每 1.5MB 增加一次)。所以它可能会在第一次、第二次或第三次工作并在下一次收到内存警告,或者如果后台运行的应用程序太多,它可能会在第一次收到内存警告。

        重要的是您如何处理此内存警告。一旦应用程序收到内存警告,所有活动视图控制器的viewDidUnload 就会被调用,您应该在其中释放所有可以再次创建的不需要的对象。所以你的应用程序可能会崩溃,因为你在那里做错了什么。所以简而言之,我们需要查看你的 .h 和 .m 文件。

        【讨论】:

          【解决方案5】:

          here你可以得到你想要的。

          在该代码中,我只是将自动释放池用于释放内存。

          希望对你有帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-10-18
            • 1970-01-01
            • 1970-01-01
            • 2012-05-28
            • 1970-01-01
            • 2018-09-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多