记忆问题,集合视图,coredata

时间:2015-05-25 17:26:12

标签: ios swift core-data out-of-memory

所以我在这里遇到这个问题,当我在控制器中选择多个图像时,我的记忆会变得疯狂。如下所示,我转换图像并将它们存储在CoreData中,因为我需要稍后将它们发送到服务器。 当图像被转换时,内存会上升很多,我不知道如何解决这个问题。在集合视图中显示图像时,将内存从30MB增加到100MB只是为了显示10张图像也是正常的吗?

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")
    }
}

1 个答案:

答案 0 :(得分:0)

代码中很多奇怪的东西。从Settings对象获取一个值的获取请求?为什么不使用NSUserDefaults

您似乎在内存中制作了太多的图像副本。对于任何给定的图像,pickedImages包含副本,newImage包含副本,当然显示它的单元格包含另一个副本。

此外,较大的图像不应直接存储在Core Data中,因为这会降低性能。您应该在外部存储图像(例如在文档目录中),并存储一个字符串,以便您轻松地重建文件路径。

在集合视图的collectionView:cellForItemAtIndexPath中,您可以使用UIImage.imageWithContentsOfFile()创建要在 ad hoc 中显示的图像。