2013-05-29 102 views
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本身,應用程序是因爲內存不足的問題,在終止前。

如何解決這個問題?

+1

爲什麼不先將照片保存到緩存或文檔文件夾,而是先將它們保存爲應用程序委託中的NSData? –

+1

像這樣的強烈操作應該在後臺線程而不是主線程上執行(只是提示以避免堵塞UI)。你能否提供更多細節? –

+0

@verbumdei:非常感謝您的建議。其實我是iOS新手。所以不太瞭解它。請告訴我存儲在documenta目錄中將會節省我而不是在NSData中。又一件事..我應該將它保存在文檔文件夾或臨時文件夾中?請回復我.. –

回答

1

您可以將這些圖像存儲在文檔/臨時目錄本身中,只要需要,您可以從文檔/臨時目錄中獲取文件,因此它不會給您任何內存問題。如果您使用臨時目錄,那麼當您運行應用程序時,下次您的圖像將不會出現。

相關問題