0
我正在使用UIImagePickerController在我的應用程序中拍攝兩張照片。我將這兩個圖像以NSData格式存儲在AppDelegate中聲明的兩個屬性中,聲明如下。iOS應用程序崩潰,內存不足警告
@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本身,應用程序是因爲內存不足的問題,在終止前。
如何解決這個問題?
爲什麼不先將照片保存到緩存或文檔文件夾,而是先將它們保存爲應用程序委託中的NSData? –
像這樣的強烈操作應該在後臺線程而不是主線程上執行(只是提示以避免堵塞UI)。你能否提供更多細節? –
@verbumdei:非常感謝您的建議。其實我是iOS新手。所以不太瞭解它。請告訴我存儲在documenta目錄中將會節省我而不是在NSData中。又一件事..我應該將它保存在文檔文件夾或臨時文件夾中?請回復我.. –