使用UIImage时的内存管理

时间:2009-01-07 11:51:40

标签: iphone cocoa-touch memory-management

我的应用程序大量使用UIImage对象根据用户输入和之前设置的图像更改单个UIImageView上的图像。我使用[UIImage imageNamed:]来创建我的UIImage对象。

我想这不是使用UIImage的最佳方式因为我的内存使用量随着时间的推移不断增加而且永远不会下降。 (当我使用Object Allocations运行应用程序时已经知道了这一点,而且我没有使用其他NSString变量,只有BOOL和UIImage)

我应该如何有效地使用UIImage和UIImageView对象来保持低内存?

由于

2 个答案:

答案 0 :(得分:11)

[UIImage imageNamed:] 

将您正在加载的图像缓存到内存中。如果你想一遍又一遍地重复使用同一组图像,这很好,但是如果你经常展示不同的(或大的)图像,那么你应该使用:

NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];

[UIImage imageWithData:imageData];

代替。

答案 1 :(得分:0)

要使用图像管理内存,按照@russtyshelf所说,您必须将图像文件转换为数据并将其转换为图像,但是之后必须使图像实例为nil以清除缓存。即在viewdidload()中,您必须编写为:

let image = [UIImage imageWithData:imageData];

并且在控制器取消初始化时或在切换视图期间,您的图像必须为零,即

image = nil