zoukankan      html  css  js  c++  java
  • UIImagePickerController之死因

    UIImagePickerController是我们最常用的组件之一,用它可以实现照相,选图片的功能。但是在照像的时候,如果后台开有很多应用,经常会出现crash的情况,是因为照出来的相片像素太高,一般是4M左右,照一张就会有4M内存占用,于是经常会出现memory warning, 然后系统回收内存,就使我们的应用crash。

    解决方法就是,在UIImagePickerControllerDelegate方法中启用一个线程来crop我们照出来的image,如下:

    1. - (void)imagePickerController:(UIImagePickerController *)picker 
    2.                     didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    3.   [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 
    4.   UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    5.   [NSThread detachNewThreadSelector:@selector(useImage:) toTarget:self withObject:image]; 

    在useImage:方法是裁剪相片,使其占用更小的内存,

    1. - (void)useImage:(UIImage *)image { 
    2.   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    3. // Create a graphics image context
    4.   CGSize newSize = CGSizeMake(320, 480); 
    5.   UIGraphicsBeginImageContext(newSize); 
    6. // Tell the old image to draw in this new context, with the desired
    7. // new size
    8.   [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
    9. // Get the new image from the context
    10.   UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    11. // End the context
    12.   UIGraphicsEndImageContext(); 
    13.   [userPhotoView setImage:newImage]; 
    14.   [pool release]; 

    这样做以后,虽然有memory warning也不至于crash.

    在此我分享一下另一个经验,如果我们的view都放在一个xib里,那么很可以造成内存警告,所以最好是一个xib对应一个view,当这个view需要的时候,才加载,不需要的时候就释放。避免hide这类的操作,因为hide其实还占有内存,只是不显示出来。

    参考资料:http://wiresareobsolete.com/2010/08/uiimagepickercontroller/

  • 相关阅读:
    Win8.1恢复被禁用虚拟WiFi适配器的方法
    VM虚拟机安装AndroidX86版
    (转)java 调用webservice的各种方法总结
    在虚拟机中配置FastDFS+Nginx模块
    Nodejs&express+mongodb完成简单用户登录(即Nodejs入门)
    C# WPF 自学 MVVM简单介绍
    【ASP.NET Core】在CentOS上安装.NET Core运行时、部署到CentOS
    log4net 写入 mongodb+Mongodb记录日志
    MongoDB学习笔记
    使用druid 数据池对连接密码加密
  • 原文地址:https://www.cnblogs.com/greywolf/p/2807522.html
Copyright © 2011-2022 走看看