2015-05-25 106 views
0

所以我在這裏有這個問題,當我在控制器中選擇多個圖像時,我的記憶變得瘋狂。如下所示,我將圖像轉換並存儲在CoreData中,因爲我需要稍後將它們發送到服務器。 當圖像轉換時,內存上升很多,我不知道如何解決這個問題。當你在集合視圖中顯示圖像時,它正常地將內存從30MB增加到100MB,以顯示10張圖像?內存問題,收集視圖,coredata

func elcImagePickerController(picker: ELCImagePickerController!, didFinishPickingMediaWithInfo info: [AnyObject]!) { 
    if (info.count == 0) { 
     return 
    } 


    var pickedImages = NSMutableArray() 
    var newImage = [UIImage()] 
    for any in info { 
      let dict = any as! NSMutableDictionary 
      let image = dict.objectForKey(UIImagePickerControllerOriginalImage) as! UIImage 
      newImage.append(image) 
      pickedImages.addObject(image) 



      println("Saving the image as binary data") 
      println(" ") 

      databaseHelper().createImage(image) 
      // look at the button for the createImage func 


     } 
    println("Adding selected images to image view", info.count) 
    self.pickerImages = newImage 
    self.pickerImages.removeAtIndex(0) 
    self.collectionView.reloadData() 
    self.dismissViewControllerAnimated(true, completion: nil) 
    println(" ") 
} 
func createImage(image: UIImage) { 
    let fetchRequest = NSFetchRequest(entityName: "Settings") 
    if let fetchResults = self.managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [Settings] { 
     let newImage = NSEntityDescription.insertNewObjectForEntityForName("Image", inManagedObjectContext: self.managedObjectContext!) as! Image 
     let convertImage = UIImageJPEGRepresentation(image, CGFloat(fetchResults[0].imageQuality)) 
     newImage.setValue(convertImage, forKey: "pickedImage") 
    } 
} 
+0

沒有人知道我可以如何改進? :( –

回答

0

你的代碼中有很多奇怪的東西。從Settings對象獲取一個值的獲取請求?爲什麼不使用NSUserDefaults

看來你在內存中製作了太多的圖像副本。對於任何給定的圖像,pickedImages包含一個副本,newImage包含一個副本,當然顯示它的單元格包含另一個副本。

此外,較大的圖像不應直接存儲在Core Data中,因爲這會降低性能。您應該將圖像存儲在外部(例如,在文檔目錄中),並存儲一個字符串,以便您輕鬆重建文件路徑。

在收集視圖的collectionView:cellForItemAtIndexPath中,您可以創建要顯示的圖像ad hoc in with UIImage.imageWithContentsOfFile()