[UIImage _isCached]: message sent to deallocated instance

本文转载至 http://zhuhaibobb.blog.163.com/blog/static/2744006720124191633375/

 
 
  这几天做了个APP打开20份钟左右就强制退出了,退出的地方不定,一只找不到问题的所在;最后只好真机调试;发现都在“[UIImage imageNamed:@"xxx.png"];”的地方出错,错误信息是“[UIImage _isCached]: message sent to deallocated instance”,经查阅资料发现是imageNamed的方式加载时,系 统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的内存是一件相对来说比较麻烦的事情。例如:如 果利用imageNamed的方式加载图像到一个动态数组NSMutableArray,然后将将数组赋予一个UIView的对象的 animationImages进行逐帧动画,那么这将会很有可能造成内存泄露。并且释放图像所占据的内存也不会那么简单。简单说就是我用了太多的imageNamed造成内存泄露。

 

为了解决以上问题只好把[UIImage imageNamed:@"xxx.png"]改成代码如下:

 

  1. NSData *image = [NSData dataWithContentsOfFile:filePath];  
  2. [UIImage imageWithData:image];  

改完后imageNamed造成的内存泄露问题是没有了,但新的问题又来了,iPhone4的retina高分辨率不能正确加载@2x形式图片,解决这一问题代码如下。

 

  1. if([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) {  
  2.     [UIImage initWithCGImage:[[UIImage imageWithData:[NSData dataWithContentsOfFile:@"xxx@2x.png"]] CGImage] scale:2.0 orientation:UIImageOrientationUp];  
  3. } else {  
  4.     [UIImage imageWithContentsOfFile:@"xxx.png"];  
  5. }  
posted @ 2013-12-02 14:06  天牛  阅读(249)  评论(0编辑  收藏  举报