【发布时间】: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