所以我在这里遇到这个问题,当我在控制器中选择多个图像时,我的记忆会变得疯狂。如下所示,我转换图像并将它们存储在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")
}
}
答案 0 :(得分:0)
代码中很多奇怪的东西。从Settings对象获取一个值的获取请求?为什么不使用NSUserDefaults
。
您似乎在内存中制作了太多的图像副本。对于任何给定的图像,pickedImages
包含副本,newImage
包含副本,当然显示它的单元格包含另一个副本。
此外,较大的图像不应直接存储在Core Data中,因为这会降低性能。您应该在外部存储图像(例如在文档目录中),并存储一个字符串,以便您轻松地重建文件路径。
在集合视图的collectionView:cellForItemAtIndexPath
中,您可以使用UIImage.imageWithContentsOfFile()
创建要在 ad hoc 中显示的图像。