【问题标题】:iOS app getting crashed with low memory warningiOS应用程序因内存不足警告而崩溃
【发布时间】:2013-05-24 22:04:16
【问题描述】:

我正在使用 UIImagePickerController 在我的应用中拍摄两张照片。我将这两个图像以 NSData 格式存储在 AppDelegate 中声明的两个属性中,声明如下。

@property(nonatomic, retain) NSData *dataCheckFront;

@property(nonatomic, retain) NSData *dataCheckBack;

我存储的图片如下:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
      NSLog(@"camera took photo...");


      [self cleanUpOverlayAndCameraView];

      if (iCheckSide==FRONT) {

         NSData *dataImage= [[NSData alloc] initWithData:UIImageJPEGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage], 1.0)];
        ((AppDelegate*)[[UIApplication sharedApplication] delegate]).dataCheckFront= dataImage;
         [dataImage release];
         dataImage= nil;
     }
     else {
         NSData *dataImage= [[NSData alloc] initWithData:UIImageJPEGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage], 1.0)];
         ((AppDelegate*)[[UIApplication sharedApplication] delegate]).dataCheckBack= dataImage;
         [dataImage release];
         dataImage= nil;

     }
 }

我需要这些图像直到将来某个时间点,我无法避免将其存储在某个地方。 使用后,我将这些属性设置为 nil,如下所示:

    [((AppDelegate*)[[UIApplication sharedApplication] delegate]) setDataCheckBack:nil];

    [((AppDelegate*)[[UIApplication sharedApplication] delegate]) setDataCheckFront:nil];

但是,在将其设置为 nil 之前,应用程序由于内存不足而终止。

如何解决?

【问题讨论】:

  • 为什么不先将照片保存到 Cache 或 Documents 文件夹,而不是在应用委托中将它们保存为 NSData?
  • 这样的密集操作应该在后台线程而不是主线程上执行(只是避免阻塞 UI 的提示)。你能提供更多细节吗?
  • @verbumdei :非常感谢您的建议。其实我是iOS新手。所以对它了解不多。请告诉我存储在 documenta 目录中而不是在 NSData 中会救我。还有一件事..我应该将它保存在文档文件夹或临时文件夹中?请回复我..
  • @RazorSharp :谢谢...在这里我想在后台线程中执行此操作。但我不能。我必须将两个基本 64 格式的 UIImages 作为插件结果发送到 javascript 方法,这是一个 UIWebView 方法,它与 UIKit 相关。不知道如何在另一个线程中执行此操作。注意:这是一个 phonegap 应用程序。

标签: ios


【解决方案1】:

您可以将这些图像存储在 document/temp 目录本身中,并且可以在需要时从 document/temp 目录中获取文件,因此不会给您带来任何内存问题。如果你使用临时目录,那么下次运行应用程序时,你的图像就不会在那里了。

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2014-03-29
    相关资源
    最近更新 更多