首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIButton setBackgroundImage消耗的内存不释放吗?

UIButton setBackgroundImage消耗的内存不释放吗?
EN

Stack Overflow用户
提问于 2010-05-06 13:33:01
回答 2查看 798关注 0票数 0

我的UIButton的背景图片设置如下:

代码语言:javascript
运行
复制
[myImageButton setBackgroundImage:[UIImage imageNamed:myImageName] forState:UIControlStateNormal];

myImageButton是类的保留属性,是用IB设置的。在应用程序中没有其他地方可以访问它。

myImageName只是一个带有@"myImage_number_1.png“文件名的NSString

我正在加载大图像,大小为1024 x 1024。当视图显示时,它使用上面的语句更改图像,然后可用内存减少。

在我看到大约7-9次不同的视图后,应用程序崩溃,并出现内存警告。

我认为这个方法会释放加载的图像。

视图本身只被实例化和分配一次,所以如果视图控制器,它不在保留/释放周期中。

是不是有什么我不知道的关于这个setBackgroundImage的东西导致它不能释放内存?

EN

回答 2

Stack Overflow用户

发布于 2010-05-06 14:00:39

啊,找到了。每次使用imageNamed加载图像时,它都会将图像缓存到内存中。我换成了imageWithContentsOfFile --它不缓存图片。

票数 4
EN

Stack Overflow用户

发布于 2017-10-17 05:57:52

对于未来的程序员来说,@just_another_coder的答案是正确的,但有一些事情你们都应该知道。

myImageName: UIImage将图像加载到一个特殊的系统缓存中,然后以后使用该图像路径的调用将返回缓存中的图像,而不是从磁盘重新加载。

UIImage imageWithContentsOfFilesimply在您指定的路径加载图像,但不缓存。对同一图像多次调用imageWithContentsOfFile将在内存中产生多个副本。

因此,你应该考虑你更喜欢哪一个,如果你使用带有内容的图片文件,你应该记住把那个按钮去掉,否则你将注定要成为一个不断增长的应用程序(内存使用明智)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2778674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档