0

我的记忆有问题。我使用 ARC。我正在将 .jpgs 加载到我的视图上的 UIImageView。

Code showing example situation:

//.h file

@interface myClass : UIViewController
{
    IBOutlet UIImageView * back;
}
// don' t have @property
// back is connected in .xib

//.m file
-(void) viewDidLoad {
    UIImage *  myImg =[UIImage imageNamed:imgName];

    back.image=myImg;
}

-(void) returnToPrevoriousView {
   [self removeFromSuperview];
   back.image = nil;
}

问题是我从另一个视图来到这个视图,而 imgName 可以有很多值。例如,我可以来 myClass 六次,然后我有日志:收到内存警告和我的应用程序崩溃。

我认为 myImg 没有从内存中释放?我不知道怎么解决?JPG大约有100kb。

PS。当我加载 .png 时,它可以工作(也更快),尽管 .png 图像通常有 600kB。但我认为它仍然不释放内存?

4

3 回答 3

2

UIImage imageNamed:如果您确定该图像不会在您的应用程序中再次使用,请不要使用。imageNamed:使用将使用额外内存的内部缓存机制。

UIImage 类参考

此方法在系统缓存中查找具有指定名称的图像对象,如果存在则返回该对象。如果匹配的图像对象尚未在缓存中,则此方法从指定文件加载图像数据,缓存它,然后返回结果对象。

而是使用UIImage imageWithContentsOfFile:一次性图像,因为这些图像没有被缓存。

注意:只会imageNamed:自动加载视网膜版本(@2x)。

于 2012-04-26T11:29:37.843 回答
1

一般来说,尝试使用 PNG 图像 .. 因为 iOS 已经过优化,可以非常有效地处理 PNG 图像 .. JPEG 图像不提供这种优化,当 iOS 开始显示 jpg 时,它需要一个更复杂的解码过程,这将花费更多的 CPU 能量。

于 2012-04-26T11:23:57.540 回答
0

将属性分配给 IBOutlet 并合成它。

于 2012-04-26T10:44:43.533 回答