[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:@"xxx@2x.png"]] CGImage] scale:2.0 orientation:UIImageOrientationUp];
} else {
	[UIImage imageWithContentsOfFile:@"xxx.png"];
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值