[UIImage _isCached]: message sent to deallocated instance

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


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

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

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

if([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) {
	[UIImage initWithCGImage:[[UIImage imageWithData:[NSData dataWithContentsOfFile:@"[email protected]"]] CGImage] scale:2.0 orientation:UIImageOrientationUp];
} else {
	[UIImage imageWithContentsOfFile:@"xxx.png"];
}






你可能感兴趣的:(image,cache,iPhone,UIView)