我正在创建一个学生索引应用程序,您可以在其中保存学生的姓名,图片和角色。一切正常,但是当我在应用测试时创建了一定数量的学生(带图片)时,应用程序运行得非常慢。请查看随附的相应方法。有没有办法压缩图像数据的大小?
- (IBAction)cameraButtonPressed:(id)sender
{
if (! [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] ) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:@"no access to camera" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
return;
}
UIImagePickerController *controller = [[UIImagePickerController alloc] init];
controller.delegate = self;
controller.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:controller animated:YES completion:nil];
}
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
[picker dismissViewControllerAnimated:YES completion:nil];
_imageView.image = image;
_imageView.contentMode = UIViewContentModeScaleAspectFit;
}
- (IBAction)save:(id)sender
{
Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student"
inManagedObjectContext:self.managedObjectContext];
self.student.picdata = UIImagePNGRepresentation(_imageView.image);
[self.managedObjectContext save:nil];
[self.delegate DetailStudentSavePressed:self];
}
答案 0 :(得分:3)
您已经压缩图像。当您致电UIImagePNGRepresentation
时,您会收到PNG风格的压缩图片文件。
您没有发布数据模型的详细信息,但至少,请确保picdata
属性配置为在模型编辑器中使用外部存储。先做。
如果这没有帮助,还有其他方法可以减少二进制blob对Core Data的影响。但那些不是下一步。您特别提到缓慢而不是内存问题,Core Data和图像的问题更可能导致内存问题。当您遇到速度问题时,不要担心图像处理,而是使用Instruments来分析您的应用。你会发现它正在减速的确切位置。